首页 > 解决方案 > 根据自定义分隔符反转字符串

问题描述

我有一个字符串;

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

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

标签: pythonstring

解决方案


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

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)

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


推荐阅读