Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/353.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何使用正则表达式仅替换括号内的内容?_Python_Regex_String_Replace - Fatal编程技术网

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]'