在 Python 中尝试使用从正则表达式 `(\d)?` 获取的 `\1` 时出错
Get error when try to use `\1` which get from regex `(\d)?` in Python
示例代码:
#!/usr/bin/env python
import re
print re.sub(r'a+(\d)?', r'', "aaaa3")
print re.sub(r'a+(\d)?', r'', "aaaa") # error!
第二个 print
语句给我一个错误:
3
Traceback (most recent call last):
File "./bbb.py", line 5, in <module>
print re.sub(r'a+(\d)?', r'', "aaaa")
File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/re.py", line 155, in sub
return _compile(pattern, flags).sub(repl, string, count)
File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/re.py", line 291, in filter
return sre_parse.expand_template(template, match)
File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/sre_parse.py", line 831, in expand_template
raise error, "unmatched group"
sre_constants.error: unmatched group
如何处理这个带有可能量词 0
的捕获变量而不出错?
注意 (\d)?
这里可以是另一个复杂的正则表达式,而不是简单的 \d
,这就是为什么我带上我的量词 ?
出出 (..)
.
在 Python 中,您可以这样做以获得可选组的空反向引用:
>>> print re.sub(r'a+(\d?)', r'', "aaaa")
>>> print re.sub(r'a+(\d?)', r'', "aaaa123")
123
即使用 (\d?)
而不是 (\d)?
Python 与许多其他正则表达式引擎不同的是,当相应的捕获组无法匹配模式时,正则表达式引擎不会填充反向引用。
示例代码:
#!/usr/bin/env python
import re
print re.sub(r'a+(\d)?', r'', "aaaa3")
print re.sub(r'a+(\d)?', r'', "aaaa") # error!
第二个 print
语句给我一个错误:
3
Traceback (most recent call last):
File "./bbb.py", line 5, in <module>
print re.sub(r'a+(\d)?', r'', "aaaa")
File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/re.py", line 155, in sub
return _compile(pattern, flags).sub(repl, string, count)
File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/re.py", line 291, in filter
return sre_parse.expand_template(template, match)
File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/sre_parse.py", line 831, in expand_template
raise error, "unmatched group"
sre_constants.error: unmatched group
如何处理这个带有可能量词 0
的捕获变量而不出错?
注意 (\d)?
这里可以是另一个复杂的正则表达式,而不是简单的 \d
,这就是为什么我带上我的量词 ?
出出 (..)
.
在 Python 中,您可以这样做以获得可选组的空反向引用:
>>> print re.sub(r'a+(\d?)', r'', "aaaa")
>>> print re.sub(r'a+(\d?)', r'', "aaaa123")
123
即使用 (\d?)
而不是 (\d)?
Python 与许多其他正则表达式引擎不同的是,当相应的捕获组无法匹配模式时,正则表达式引擎不会填充反向引用。