如何使用正则表达式仅替换括号内的内容?

时间:2014-03-06 12:46:54

标签: python regex string replace

如何使用正则表达式仅替换括号内的内容?

String = "This is my string [123]"

我想用456替换123

Desired_String = "This is my string [456]"

我的尝试:

regex = '.*\[(.*?)\].*'
re.sub(regex,'456',String)
>> 456

我不确定要使用什么正则表达式,以便用456替换123。

2 个答案:

答案 0 :(得分:5)

如果你修改你的正则表达式和你的替换字符串,你得到它:

regex = '\[.*?\]'
re.sub(regex,'[456]',String)

您无需将整个字符串与.*匹配,以便替换工作。

此外,这里并不完全需要,但是生成正则表达式字符串是一种很好的做法:

regex = r'\[.*?\]'
        ^

另一个选择是使用否定的类,这也会更快!

regex = r'[^\[\]]+(?=\])'
re.sub(regex,'456',String)

可能有点令人困惑,但[^\[\]]+匹配除[]之外的任何字符。

regex101 demo

答案 1 :(得分:3)

或者,您可以使用前瞻和后瞻断言(documentation):

>>> regex = r'(?<=\[).*?(?=\])'
>>> re.sub(regex, '456', 'This is my string [123]')
'This is my string [456]'