Python正则表达式:使用组在一次传递中进行多个不同的替换

时间:2017-05-22 23:53:36

标签: python regex substitution

我的任务是获取一个字符串,在该字符串中查找两种不同类型匹配项的所有实例,并在每种类型的每个匹配项上执行类似但不同的替换,所有这些都使用单个RegEx和a单次通过re.sub()

具体来说,我正在寻找任何<<=,并分别用>>=替换它们。需要替换的每个比较运算符都在\w*定义的两个单词之间,两侧有零个或多个空格\s*

我找到了一个正则表达式,它找到所有必要的匹配项并将它们分成有用的组:

((\b\w*(\s*<\s*)\w*\b)|(\b\w*(\s*<=\s*)\w*\b))+

这将解析字符串,以便匹配符合搜索条件的所有比较,并且所有<都将位于匹配组\3中,并且所有<=都将位于匹配组中\5

我的问题是:有没有办法在电话中将所有\3替换为' > ',将所有\5替换为' >= 're.sub()?我已经阅读了python subre方法的文档,但还未能找到方法,可能是因为我对语法和行为的熟悉程度有限。整个系统。

我被允许并期望在替换之前单独编译正则表达式,因此最终设置将如下所示:

r1 = re.compile(r"((\b\w*(\s*<\s*)\w*\b)|(\b\w*(\s*<=\s*)\w*\b))+")
subStr = r" ??? " 

r1.sub( ???, subStr ??? )

以下是一些输入/输出示例:

输入字符串:

  

&#34; v1&lt; v2 v3&lt; = v4 v5&gt; v6 v7&gt; = v8&#34;

运行替换会产生:

  

&#34; v1&gt; v2 v3&gt; = v4 v5&gt; v6 v7&gt; = v8&#34;

将我的模式和输入字符串插入到https://regex101.com/ for python中,将以我描述的方式显示我的模式如何与输入字符串匹配。

1 个答案:

答案 0 :(得分:3)

您只需要使用= optional并捕获&lt;:

周围的部分
re.sub(r'\b(?<=\w)(\s*)<(=?\s*\w)', r'\1>\2', s)

出于效率原因,我使用边界\b启动了模式,以下lookbehind (?<=\w)确保至少有一个单词字符。