Python 用正则表达式模式替换

Python 用正则表达式模式替换,python,regex,Python,Regex,我有一个类似于longstring abc{something goes here}的字符串,我想用replacement替换abc之后大括号内的部分。(因此应该是longstringabc{replacement}。我正在尝试使用re.sub函数: re.sub(r'abc\{(.*)\}', r'replacement', r'mylongstring-abc\{def\}') 因此,我试图寻找模式abc\{(.*)},并替换中的内容(…)替换为但这只会返回原始字符串。我如何才能更正它?首

我有一个类似于
longstring abc{something goes here}
的字符串,我想用
replacement
替换
abc
之后大括号内的部分。(因此应该是
longstringabc{replacement}
。我正在尝试使用
re.sub
函数:

re.sub(r'abc\{(.*)\}', r'replacement', r'mylongstring-abc\{def\}')

因此,我试图寻找模式
abc\{(.*)}
,并替换
中的内容(…)
替换为
但这只会返回原始字符串。我如何才能更正它?

首先,一个小问题:您不需要在RE中转义大括号;它们代表它们自己。此外,如果您在字符串本身中转义大括号,则会在字符串中插入实际的反斜杠,并且您的RE必须将它们匹配为w嗯

其次,针对您的问题:匹配足够多的字符串,以确保不会错误匹配。整个字符串都将被替换,因此如果您只想替换大括号内的内容,请使用组捕获并重用您未更改的部分:

re.sub(r'(abc){.*}', r'\1{replacement}', 'mylongstring-abc{def}')
或者,如果“abc”部分是固定的,您可以简单地按字面意思包括它:

re.sub(r'abc{.*}', r'abc{replacement}', 'mylongstring-abc{def}')
请注意,除非您在替换字符串中使用它,否则您不需要在
*
周围建立一个组


顺便说一句,如果同一行上有另一个右大括号,您的模式将匹配得太多。若要在第一个右大括号处停止,请使用
r“(abc){[^}]*}”
r”(abc){.*?}”
。后者是“非贪婪的”star:它尽可能少地匹配。

首先,一个小问题:你不需要在RE中逃逸大括号;它们代表它们自己。此外,如果你在字符串本身中逃逸大括号,你在字符串中插入了实际的反斜杠,你的RE也必须匹配它们

其次,针对您的问题:匹配足够多的字符串,以确保不会错误匹配。整个字符串都将被替换,因此如果您只想替换大括号内的内容,请使用组捕获并重用您未更改的部分:

re.sub(r'(abc){.*}', r'\1{replacement}', 'mylongstring-abc{def}')
或者,如果“abc”部分是固定的,您可以简单地按字面意思包括它:

re.sub(r'abc{.*}', r'abc{replacement}', 'mylongstring-abc{def}')
请注意,除非您在替换字符串中使用它,否则您不需要在
*
周围建立一个组

顺便说一句,如果同一行上有另一个右大括号,您的模式将匹配得太多。若要在第一个右大括号处停止,请使用
r“(abc){[^}]*}”
r“(abc){.*.}”
。后者是一个“非贪婪”星形:它匹配得尽可能少