【发布时间】:2014-01-10 07:21:52
【问题描述】:
假设我有类似s='abaabbab' 的东西。是否可以使用正则表达式将其更改为s='babbaaba'?我主要想知道这是否可能,而不是是否合理。
我认为其中一个可能会起作用(之前已导入 re):
s='ab'
re.sub('a|b',lambda x:['b','a'][x=='a'],s)
#or maybe
re.sub(r'a|b',lambda x:['b','a'][x=='b'],s)
但它们只会产生'bb'。
我知道我可以用c 替换所有a,然后用a 替换所有b,然后用b 替换所有c ,但这似乎很长。
from string import maketrans
trans_table = maketrans(".-a","-.A")
"foo-bar.".translate(trans_table)
但我似乎无法在 python 3 中工作。
【问题讨论】:
-
正则表达式对于定义模式和查找与这些模式匹配的内容非常有用。像这样的字符替换任务似乎不适合正则表达式。
-
@user2357112 我主要是好奇是否有可能
-
你只是在做简单的字符替换。正则表达式不会更短,会不太不稳定并且会更慢。在这里使用翻译没有任何问题。
-
@JonClements 好的;但是,translate 在 python 3 中似乎不起作用...(我复制了该代码,但出现错误)
-
@Quincunx 那么你的问题实际上是“我已经尝试过了 - 它在 Python 3 上不起作用” - 或者是,我真的,真的想要一个正则表达式... ?如果前者 - 你有你的答案:)
标签: python regex string python-3.x