【问题标题】:Reverse a string based on custom delimeter根据自定义分隔符反转字符串
【发布时间】:2020-12-22 05:41:17
【问题描述】:

我有一个字符串;

txt = "Hello$JOHN$*How*Are*$You"

我想要这样的输出:

Output: "You*$Are*How$*JOHN$Hello"

如果您仔细观察,字符分隔符($ and *) 的出现顺序并没有颠倒。字符串逐字颠倒,但分隔符保持顺序。

我尝试了以下方法:

sep=['$','*']
txt_1 = ""

for ch in txt:
    if ch in sep:
        txt_1 = txt_1+ch

我想不出逻辑来捕获分隔符的顺序并反转字符串的单词。

【问题讨论】:

    标签: python string


    【解决方案1】:

    一种使用正则表达式的方法:

    import re
    
    s = "Hello$JOHN$*How*Are*$You"
    
    splits = re.split('([$*]+)', s)
    res = ''.join(reversed(splits))
    
    print(res)
    

    输出

    You*$Are*How$*JOHN$Hello
    

    一个(可能不太优雅)的解决方案(但更容易理解)是使用itertools.groupby

    from itertools import groupby
    
    s = "Hello$JOHN$*How*Are*$You"
    
    splits = [''.join(g) for k, g in groupby(s, key=lambda x: x in ('$', '*'))]
    res = ''.join(reversed(splits))
    print(res)
    

    这里的想法是创建分隔符、非分隔符字符的连续序列。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-10-23
      • 1970-01-01
      • 1970-01-01
      • 2019-09-19
      • 1970-01-01
      • 1970-01-01
      • 2011-08-04
      • 2013-10-19
      相关资源
      最近更新 更多