Python 如何使用正则表达式仅替换括号内的内容?
如何使用正则表达式仅替换括号内的内容Python 如何使用正则表达式仅替换括号内的内容?,python,regex,string,replace,Python,Regex,String,Replace,如何使用正则表达式仅替换括号内的内容 String = "This is my string [123]" 我想把123换成456 Desired_String = "This is my string [456]" 我的尝试: regex = '.*\[(.*?)\].*' re.sub(regex,'456',String) >> 456 我不确定要使用什么正则表达式,以便用456替换123 如果稍微修改正则表达式和替换字符串,您会得到: regex = '\[.*?\]'
String = "This is my string [123]"
我想把123换成456
Desired_String = "This is my string [456]"
我的尝试:
regex = '.*\[(.*?)\].*'
re.sub(regex,'456',String)
>> 456
我不确定要使用什么正则表达式,以便用456替换123 如果稍微修改正则表达式和替换字符串,您会得到:
regex = '\[.*?\]'
re.sub(regex,'[456]',String)
您不需要将整个字符串与*
匹配,就可以进行替换
此外,这里并不完全需要它,但最好的做法是原始生成正则表达式字符串:
regex = r'\[.*?\]'
^
另一个选择是使用否定类,这也会更快
regex = r'[^\[\]]+(?=\])'
re.sub(regex,'456',String)
这可能有点让人困惑,但是[^\[\]+
匹配除[
和]
之外的任何字符
或者,您可以使用look-ahead和look-behind断言():
>>>regex=r'(?@thefourtheye)然后你有另一个问题,特别是如果它是[abcd 123 def 123 ghi]
。实际上我认为这个问题很复杂,但正如你所展示的那样很简单。+1我的一个限制是替换字符串必须有括号。理想情况下,我想要re.sub(regex,'456',string)也可以。@Chris好的,让我在我的回答中编辑一些不同的内容。我会问我在一起提到方括号和regexp时经常问的问题:如果输入字符串有嵌套方括号怎么办?“foo[bar[baz]qux]troz”
的预期输出是什么?如果您的regex逻辑基于“匹配第一个开始括号,然后匹配第一个结束括号”,您将得到“foo[456]qux]troz”
@Kevin True。在这种情况下,标准re模块无法处理无限嵌套,尽管regex模块的实现可能会很复杂。
>>> regex = r'(?<=\[).*?(?=\])'
>>> re.sub(regex, '456', 'This is my string [123]')
'This is my string [456]'