在python正则表达式中,命名和未命名组都使用'('和')'定义.这导致了一种奇怪的行为.正则表达式
"(?P<a>1)=(?P<b>2)"
Run Code Online (Sandbox Code Playgroud)
与文本"1 = 2"一起使用时,将找到值为"1"的命名组"a",并将值"2"命名为组"b".但是,如果我想使用"逻辑或"运算符并连接多个规则,请使用以下正则表达式:
"((?P<a>1)=(?P<b>2))|(?P<c>3)"
Run Code Online (Sandbox Code Playgroud)
使用相同文本"1 = 2"将找到一个值为"1 = 2" 的未命名组.我知道regexp引擎会将"("和")"视为一个未命名的组,并将"a"和"b"组合在一起,并报告它已找到.但我不希望报告一个未命名的组,我只想使用"|" 为了将多个正则表达式"粘合"在一起.没有创建任何寄生的未命名组.这是在python中这样做的方法吗?
Aym*_*ieh 13
用于(?:)摆脱未命名的组:
r"(?:(?P<a>1)=(?P<b>2))|(?P<c>3)"
Run Code Online (Sandbox Code Playgroud)
从re的文档:
(?:...)常规括号的非分组版本.匹配括号内的正则表达式,但在执行匹配或稍后在模式中引用后,无法检索组匹配的子字符串.
顺便说一下,交替运算符的|优先级非常低,以便在像你这样的情况下不需要括号.您可以在正则表达式中删除额外的括号,它将继续按预期工作:
r"(?P<a>1)=(?P<b>2)|(?P<c>3)"
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3903 次 |
| 最近记录: |