Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/356.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 - Fatal编程技术网

Python 替换与正则表达式匹配的所有引用

Python 替换与正则表达式匹配的所有引用,python,regex,Python,Regex,我有一个正则表达式,它搜索包含'.00.或'.11.的字符串,如下所示: .*\.(00|11)\..* 我想做的是用'X00X'或'X11X'替换与模式匹配的所有引用。例如,字符串'.00..0..11.将导致'X00X.0.X11X' 我正在研究Python re.sub方法,不确定如何有效地做到这一点。返回的match对象仅在第一次出现时匹配,因此无法正常工作。有什么建议吗?我是否应该使用字符串替换来完成此任务?谢谢。re.sub()(和的文档)确实会替换它找到的所有匹配项,但是使用*可

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

.*\.(00|11)\..*
我想做的是用
'X00X'
'X11X'
替换与模式匹配的所有引用。例如,字符串
'.00..0..11.
将导致
'X00X.0.X11X'

我正在研究Python re.sub方法,不确定如何有效地做到这一点。返回的match对象仅在第一次出现时匹配,因此无法正常工作。有什么建议吗?我是否应该使用字符串替换来完成此任务?谢谢。

re.sub()
(和的文档)确实会替换它找到的所有匹配项,但是使用
*
可能导致正则表达式匹配过多(甚至出现了
.00.
等)。简单地做:

In [2]: re.sub(r"\.(00|11)\.", r"X\1X", ".00..0..11.")
Out[2]: 'X00X.0.X11X'
请注意,模式不能重叠:

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

re.sub是否使用搜索和不匹配?在Python中,
match
在字符串开头搜索匹配,它不需要完整的字符串匹配
re.sub
查找与模式匹配的所有非重叠序列并替换它们。对不起,我不明白:从文档中“返回通过替换repl替换字符串中模式的最左侧非重叠匹配项而获得的字符串”:这是如何“替换找到的所有匹配项”的?@gented:regex引擎从左到右遍历字符串。一旦找到匹配项,它就会替换它并继续。因此,如果您的字符串为“aaaa”,并且您将“aa”替换为“bb”,则即使字符串中有三个(重叠的)“aa”实例,您也会得到“bbbb”而不是“bbbbbb”。