在Python中尝试使用从regex`(\d)``获取的`\1`时出现Get错误

在Python中尝试使用从regex`(\d)``获取的`\1`时出现Get错误,python,regex,replace,capture-group,Python,Regex,Replace,Capture Group,示例代码: #!/usr/bin/env python import re print re.sub(r'a+(\d)?', r'\1', "aaaa3") print re.sub(r'a+(\d)?', r'\1', "aaaa") # error! 第二个print语句给了我一个错误: 3 Traceback (most recent call last): File "./bbb.py", line 5, in <module> print re.sub(r'

示例代码:

#!/usr/bin/env python
import re

print re.sub(r'a+(\d)?', r'\1', "aaaa3")
print re.sub(r'a+(\d)?', r'\1', "aaaa") # error!
第二个
print
语句给了我一个错误:

3
Traceback (most recent call last):
  File "./bbb.py", line 5, in <module>
    print re.sub(r'a+(\d)?', r'\1', "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
3
回溯(最近一次呼叫最后一次):
文件“/bbb.py”,第5行,在
打印参考文件(r'a+(\d)?'、r'\1'、“aaaa”)
文件“/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/re.py”,第155行,子部分
return\u compile(模式、标志).sub(repl、字符串、计数)
过滤器中的文件“/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/re.py”,第291行
返回sre_parse.expand_模板(模板,匹配)
expand_模板中的文件“/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/sre_parse.py”,第831行
引发错误,“不匹配的组”
sre_constants.error:组不匹配
如何使用可能的量词
0
处理此捕获变量而不出错


注意
(\d)?
这里可以是另一个复杂的正则表达式,而不仅仅是一个简单的as
\d
,这就是为什么我在Python中将量词
带出
(…)

,您可以这样做以获得可选组的空引用:

>>> print re.sub(r'a+(\d?)', r'\1', "aaaa")

>>> print re.sub(r'a+(\d?)', r'\1', "aaaa123")
123
i、 e.使用
(\d?
代替
(\d)?


与许多其他正则表达式引擎不同,Python正则表达式引擎在相应的捕获组未能匹配模式时不会填充回引用。

移动到捕获组内。在Python中,您不能回引用失败(不匹配)的捕获组。但你可以在JavaScript中:)我尝试了这个简单的代码,它可以工作,但在我的终端上,它不工作,然后我有点困惑。无论如何,感谢您的回复。@Stribizev您的信息和关于Javascript的注释应该会有帮助,请回答下面的问题。我想目前接受的答案解释了这一切,不需要。