Python Regex立即替换组


106

有没有办法使用正则表达式语法直接替换所有组?

正常方式:

re.match(r"(?:aaa)(_bbb)", string1).group(1)

但我想实现以下目标:

re.match(r"(\d.*?)\s(\d.*?)", "(CALL_GROUP_1) (CALL_GROUP_2)")

我想从正则表达式刚刚捕获的组中立即构建新字符串。

Answers:


189

看一下re.sub

result = re.sub(r"(\d.*?)\s(\d.*?)", r"\1 \2", string1)

这是Python的正则表达式替换(替换)功能。替换字符串可以用所谓的反向引用(反斜杠,组号)填充,这些反向引用将被组匹配的内容替换。该组的计数与该group(...)函数的计数相同,即1,从,从左到右,通过打开括号开始。


4
比文档更清晰!不明白小组如何与这一小组合作。他们应该添加这样的例子。
Y0da '18 -4-26

它从头开始起作用,这是一个很好的清晰解释方式。谢谢,您能解释一下小组应该如何以适当的方式打电话(r(r))r((r)((r)r))吗?
Rakshitha Muranga Rodrigo

1
@RakshithaMurangaRodrigo这些组从左到右编号,从其起始位置开始。因此,如果我在每个组的前面插入每个组的编号,则会对其进行排序:1(r2(r))r3(4(r)5(6(r)r))
马丁·恩德

@MartinEnder:非常感谢!
Rakshitha Muranga Rodrigo

30

公认的答案是完美的。我想补充一点,使用以下语法可能会更好地实现组引用:

r"\g<1> \g<2>"

用于替换字符串。这样,您就可以解决语法限制,在语法限制中,组后面可以跟数字。再说一次,这一切都存在于文档中,没有什么新鲜的,只是有时很难一眼看出来。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.