【发布时间】:2013-11-16 15:48:03
【问题描述】:
考虑这个(非常简化的)示例字符串:
1aw2,5cx7
如您所见,它是由逗号分隔的两个digit/letter/letter/digit 值。
现在,我可以将其与以下内容匹配:
>>> from re import match
>>> match("\d\w\w\d,\d\w\w\d", "1aw2,5cx7")
<_sre.SRE_Match object at 0x01749D40>
>>>
问题是,我必须写两次\d\w\w\d。对于小模式,这还不错,但是对于更复杂的正则表达式,两次编写完全相同的东西会使最终模式变得庞大且难以处理。也显得多余。
我尝试使用命名捕获组:
>>> from re import match
>>> match("(?P<id>\d\w\w\d),(?P=id)", "1aw2,5cx7")
>>>
但它不起作用,因为它正在寻找两次出现的 1aw2,而不是 digit/letter/letter/digit。
有什么方法可以保存部分模式,例如\d\w\w\d,以便以后在相同的模式中使用?换句话说,我可以在一个模式中重用一个子模式吗?
【问题讨论】: