在python中的re.match()中引用捕获组

时间:2016-08-11 15:29:18

标签: python regex python-2.7

嗨,这是我要匹配的字符串

mystr = "mykey/20161010/20161010"

到目前为止我的regex就像这样

re.match("mykey/([2-9][0-9][0-9][0-9][0-1][0-9][0-3][0-9])/[.]*", mystr)

如您所见,我使用的是Capture group。我想通过引用我已创建的Capture组来替换[.]*。我该怎么做?

PS:我正在使用Python 2.7

更新1 基于到目前为止的答案,我已经尝试了这个(我已经简化了一些示例),但似乎没有工作......

>>> mystr = "mykey/20/20"

>>> print re.match("mykey\/([2-9][0-9])\/[.]*", mystr)
<_sre.SRE_Match object at 0x7faf96ddf558>

>>> print re.match("mykey\/([2-9][0-9])\/.*", mystr)
<_sre.SRE_Match object at 0x7faf96ddf558>

>>> print re.match("mykey\/([2-9][0-9])\/\1", mystr)
None

我在尝试引用None时收到Capture group。我错过了什么吗?

更新2:终于工作...... 希望这有助于寻找答案的人。添加额外的backslash(ie \)可以解决问题

>>> import re
>>> mystr = "mykey/20160610/20160610"
>>> re.match("mykey/([2-9][0-9][0-9][0-9][0-1][0-9][0-3][0-9])/\\1", mystr)
<_sre.SRE_Match object at 0x7fe352145558>

1 个答案:

答案 0 :(得分:2)

mykey\/([2-9][0-9][0-9][0-9][0-1][0-9][0-3][0-9])\/\1

使用\1 - 捕获第一个捕获组产生的完全匹配,在这种情况下为[2-9][0-9][0-9][0-9][0-1][0-9][0-3][0-9]

同样的较短版本将是

mykey\/([2-9]\d{3}[0-1]\d[0-3]\d)\/\1