我一直使用[0-9]{9,12}
来表示数字字符串的长度为9或12个字符。但是我现在意识到它将匹配长度为10或11的输入字符串。所以我出来了天真:
( [0-9]{9} | [0-9]{12} )
是否有更简洁的正则表达式代表这个?
答案 0 :(得分:7)
您可以使用
保存一个字符[0-9]{9}([0-9]{3})?
但在我看来,你的方式更好,因为它更清楚地传达了你的意图。正则表达式很难阅读。
当然,您可以使用\d
代替[0-9]
。
(编辑:我首先想到你可以放弃[0-9]{3}
周围的问题,但你不能;问号将被忽略。所以你只保存一个字符,而不是三个。)
(编辑2:您还需要使用^
锚定正则表达式,$
(或\b
)或re.match()
也匹配123456789
1234567890
。)
答案 1 :(得分:6)
你可以尝试
(\d{9}\d{3}?)
匹配9,然后是可选的额外3位
或
((\d{3}){3,4})
匹配3或4组3位数
答案 2 :(得分:1)
你可以这样做:
[0-9]{9}[0-9]{3}?
没有太大的不同......