0

我有一个字符串:

'[text], text, {text}, itextm'

我应该最终得到:

'[replaced], text, {replaced}, ireplacedm'

如何使用 python re 模块来做到这一点?谢谢!

4

3 回答 3

0

这并不完美,因为如果您有类似的设置,它将无法正常工作[term}more],但它至少适用于您的示例。

re.sub(r'([[{]).*?([\]}])', r'\1replaced\2', str)
于 2013-05-08T22:44:42.097 回答
0
In [1]: s='[text], text, {text}, itextm'
In [2]: import re
In [3]: re.sub(r'([[{])[^\]}]*',r'\1replaced',s)
Out[3]: '[replaced], text, {replaced}, itextm'

编辑

啊......我没有注意到你的例子的最后一部分,ireplacedm

现在这应该适用于您的示例:

In [8]: re.sub(r'([^ ,])text([^ ,])',r'\1replaced\2',s)                                                                                                                     
Out[8]: '[replaced], text, {replaced}, ireplacedm'
于 2013-05-08T22:57:32.437 回答
0

您可以使用此模式:

import re

pattern = '(?<=(\[)|(\{)|([a-z])|.)text(?=(?(1)]|(?(2)}|(?(3)|[a-z]))))'
subject = '[text], text, {text}, itextm [text} {text] textus atext'
result = re.sub(pattern, 'replaced', subject)

print result

当开头或结尾至少有一个字母时,它会测试方括号或大括号是否平衡或匹配单词。

结果:

[replaced], text, {replaced}, ireplacedm [text} {text] replacedus areplaced
于 2013-05-08T23:10:53.300 回答