我要匹配的模式是一些字符(字母+数字+连字符(-)
),然后是 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
。
以上有什么问题?