Python 正则表达式:使用组在单次传递中进行多个不同的替换
Python Regular Expressions: making multiple different substitutions in a single pass using Groups
我的任务是获取一个字符串,在该字符串中查找两种不同类型的匹配项的所有实例,并对每种类型的每个匹配项执行相似但不同的替换,所有这些都使用一个正则表达式和一个单次通过 re.sub()
具体来说,我正在寻找任何 <
或 <=
并分别用 >
和 >=
替换它们。每个需要替换的比较运算符都在 \w*
定义的两个单词之间,两边有零个或多个空格 \s*
。
我找到了一个正则表达式,可以找到所有必要的匹配并将它们归为有用的组:
((\b\w*(\s*<\s*)\w*\b)|(\b\w*(\s*<=\s*)\w*\b))+
这将解析字符串,以便匹配所有符合搜索条件的比较,并且所有 <
将在匹配组 </code> 中,所有 <code><=
将在匹配组 </code></p>
<p>我的问题是:有没有办法在 <em>single</em> 打电话给 <code>re.sub()
?我已经通读了 python re
中 sub
方法的文档,但一直找不到方法,这可能是由于我对整个系统。
我被允许并期望在替换之前单独编译正则表达式,因此最终设置将如下所示:
r1 = re.compile(r"((\b\w*(\s*<\s*)\w*\b)|(\b\w*(\s*<=\s*)\w*\b))+")
subStr = r" ??? "
r1.sub( ???, subStr ??? )
这里有一些例子input/output:
输入字符串:
"v1 < v2 v3 <= v4 v5 > v6 v7 >= v8"
运行 替换将产生:
"v1 > v2 v3 >= v4 v5 > v6 v7 >= v8"
将我的模式和输入字符串插入 https://regex101.com/ for python,将显示我的模式如何按照我描述的方式匹配输入字符串。
您只需将 = 设为可选并捕获 <:
周围的部分
re.sub(r'\b(?<=\w)(\s*)<(=?\s*\w)', r'>', s)
出于效率原因,我以单词边界 \b
开始模式,以下回顾 (?<=\w)
确保至少有一个单词字符。
我的任务是获取一个字符串,在该字符串中查找两种不同类型的匹配项的所有实例,并对每种类型的每个匹配项执行相似但不同的替换,所有这些都使用一个正则表达式和一个单次通过 re.sub()
具体来说,我正在寻找任何 <
或 <=
并分别用 >
和 >=
替换它们。每个需要替换的比较运算符都在 \w*
定义的两个单词之间,两边有零个或多个空格 \s*
。
我找到了一个正则表达式,可以找到所有必要的匹配并将它们归为有用的组:
((\b\w*(\s*<\s*)\w*\b)|(\b\w*(\s*<=\s*)\w*\b))+
这将解析字符串,以便匹配所有符合搜索条件的比较,并且所有 <
将在匹配组 </code> 中,所有 <code><=
将在匹配组 </code></p>
<p>我的问题是:有没有办法在 <em>single</em> 打电话给 <code>re.sub()
?我已经通读了 python re
中 sub
方法的文档,但一直找不到方法,这可能是由于我对整个系统。
我被允许并期望在替换之前单独编译正则表达式,因此最终设置将如下所示:
r1 = re.compile(r"((\b\w*(\s*<\s*)\w*\b)|(\b\w*(\s*<=\s*)\w*\b))+")
subStr = r" ??? "
r1.sub( ???, subStr ??? )
这里有一些例子input/output:
输入字符串:
"v1 < v2 v3 <= v4 v5 > v6 v7 >= v8"
运行 替换将产生:
"v1 > v2 v3 >= v4 v5 > v6 v7 >= v8"
将我的模式和输入字符串插入 https://regex101.com/ for python,将显示我的模式如何按照我描述的方式匹配输入字符串。
您只需将 = 设为可选并捕获 <:
周围的部分re.sub(r'\b(?<=\w)(\s*)<(=?\s*\w)', r'>', s)
出于效率原因,我以单词边界 \b
开始模式,以下回顾 (?<=\w)
确保至少有一个单词字符。