我要匹配的模式是一些字符(字母+数字+连字符(-)),然后是 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})?表示 5 位数部分可能有 0 个或 1 个实例,因此使其成为可选。
因为-?,如果两个数字部分都不存在,那么不会有任何-数字部分,但如果两个数字部分都存在,那么就会有 1 -,所以我再次将其设为可选。
同样对于(\d{9})?。
但是上面的模式不匹配任何东西。我正在使用 python 所以两者group(1)都group(2)返回None。
以上有什么问题?