python - 根据自定义分隔符反转字符串

标签 python string

我有一个字符串;

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/

相关文章:

python - 一个类从一个不是类型的对象继承是什么意思?

python - Tkinter Canvas 缩放 + 移动/平移

Python Pandas : Reindex DataFrameGroupBy Object to Dataframe Error

Python - 带有 GridSearchCV 的 LightGBM,永远运行

ruby - 如何返回具有重复元素的 Ruby 数组交集? (骰子系数中的二元组问题)

我可以使用 scanf 来选择在哪一点修改字符串吗?

python - 导入错误 : No module named gspread

string - 如何在 Go 中将整个字符串保存为 txt 文件?

XML 将单个字符串 XML 转换为格式正确的文件以进行编辑?

php - 在php中使用正则表达式查找字符串中单词的多次出现