python - 根据自定义分隔符反转字符串
问题描述
我有一个字符串;
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
我想不出逻辑来捕获分隔符的顺序并反转字符串的单词。
解决方案
使用正则表达式的一种方法:
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 - 遍历 pandas 数据框或 groupby 对象
- c++ - C++ 平台支持
- asp.net - 使用方法 void 在控制器之间传递数据
- python - 如何使用 requests.post 转到谷歌表单的下一页
- javascript - 尝试使用一些 javascript 更新我的数据库(Laravel)
- macos - 在我的目录中找到最新的 JSON 文件并确认内容 Mac Terminal
- unity3d - 为什么对象没有被破坏(光线投射)?
- excel - Excel 单元格更改内容事件 - 带有 DDE 链接
- python - django rest 框架:是否可以在不使用主键的情况下创建放置/补丁请求?
- java - MySQL DB 上的 SimpleJdbcInsert 在 executeAndReturnKey 方法后返回 BigInteger 而不是 Long