我有一个字符串;
txt = "Hello$JOHN$*How*Are*$You"
我想要这样的输出:
Output: "You*$Are*How$*JOHN$Hello"
如果您仔细观察,字符定界符 ($ 和 *)
的出现顺序不会颠倒。字符串逐字颠倒,但定界符保持顺序。
我尝试了以下方法:
sep=['$','*']
txt_1 = ""
for ch in txt:
if ch in sep:
txt_1 = txt_1+ch
我无法想出捕获定界符序列并反转字符串单词的逻辑。
最佳答案
一种使用正则表达式的方法:
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)
这里的想法是创建连续的定界符、非定界符序列。
关于python - 根据自定义分隔符反转字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65399845/