我有一个字符串:
'[text], text, {text}, itextm'
我应该最终得到:
'[replaced], text, {replaced}, ireplacedm'
如何使用 python re 模块来做到这一点?谢谢!
这并不完美,因为如果您有类似的设置,它将无法正常工作[term}more]
,但它至少适用于您的示例。
re.sub(r'([[{]).*?([\]}])', r'\1replaced\2', str)
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'
您可以使用此模式:
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