替换所有与正则表达式匹配的匹配项

tot*_*ter 13 python regex

我有一个正则表达式,搜索包含'.00.''.11.'如下的字符串:

.*\.(00|11)\..*
Run Code Online (Sandbox Code Playgroud)

我想做的是用'X00X'或替换所有与模式匹配的事件'X11X'.例如,字符串'.00..0..11.'将导致'X00X.0.X11X'.

我正在研究Python re.sub方法,并且不确定如何有效地执行此操作.返回的匹配对象仅在第一次出现时匹配,因此无法正常工作.有什么建议?我应该只使用字符串替换此任务吗?谢谢.

Tim*_*ker 18

re.sub()(Python 2Python 3的文档)确实替换了它找到的所有匹配项,但是你的使用.*可能导致正则表达式匹配太多(甚至其他类似的事件.00.).简单地说:

In [2]: re.sub(r"\.(00|11)\.", r"X\1X", ".00..0..11.")
Out[2]: 'X00X.0.X11X'
Run Code Online (Sandbox Code Playgroud)

请注意,模式不能重叠:

In [3]: re.sub(r"\.(00|11)\.", r"X\1X", ".00.11.")
Out[3]: 'X00X11.'
Run Code Online (Sandbox Code Playgroud)

  • 如果您的字符串是“aaaa”并且您将“aa”替换为“bb”,则即使字符串中存在三个(重叠的)“aa”实例,您也会得到“bbbb”而不是“bbbbbb”。 (4认同)
  • 在Python中,“match”在字符串的开头搜索匹配,它不需要完整的字符串匹配。`re.sub` 找到与模式匹配的所有非重叠序列并替换它们。 (2认同)