这个正则表达式有什么问题

时间:2012-06-17 20:10:49

标签: regex

我想要匹配的模式是一些字符(字母+数字+连字符(-)),然后是5位数字,然后是9位数字。模式的每个部分由连字符(-)分隔.5位和9位数部分是可选的,意味着其中一个可能存在而其他部分可能不存在或者可能两者都存在或者两者都不存在。所以模式可以像这样

bla-12-bla-98-bla-12345-123456789     all parts(characters+5-digit+9-digit)
bla-bla-123-12345                     9-digit part absent
blasd-123456789                       5-digit part absent
no-1045-numeric-bla-bla               both numeric parts absent

我想出的正则表达式就是这个

.+(\d{5})?-?(\d{9})?$

上面的推理是这样的。由于开头的.+匹配所有字符,(\d{5})?表示可能有0或1个5位数部分的实例,因此可选。

对于-?,如果两个数字部分都不存在则会有任何-,但如果两个数字部分都存在,则会有1 -所以我再次选择它

同样适用于(\d{9})?

但上述模式与任何事物都不匹配。我正在使用python,因此group(1)group(2)都返回None

上面的问题怎么了?

1 个答案:

答案 0 :(得分:2)

问题是开头的.+。正则表达式解释器无法推断.+何时结束。因此,您的模式确实匹配,但您的匹配组将始终为None,如您所见。如果您只是使用

(\d{5})?\-?(\d{9})?$

相反,它仍会匹配您的所有示例,并且您的匹配组将被正确识别。