我一直[0-9]{9,12}
用来表示数字字符串的长度为9或12个字符.但是我现在意识到它将匹配长度为10或11的输入字符串.所以我出来了天真:
( [0-9]{9} | [0-9]{12} )
Run Code Online (Sandbox Code Playgroud)
是否有更简洁的正则表达式来代表这个?
您可以使用保存一个字符
[0-9]{9}([0-9]{3})?
Run Code Online (Sandbox Code Playgroud)
但在我看来,你的方式更好,因为它更清楚地传达了你的意图.正则表达式已经足够难以阅读了.
当然你可以用\d
而不是[0-9]
.
(编辑:我首先想到你可以丢掉那些parens [0-9]{3}
但你不能;问号将被忽略.所以你只保存一个字符,而不是三个.)
(编辑2:您还需要使用^
和$
(或\b
)锚定正则表达式,或者re.match()
也将123456789
在内部匹配1234567890
.)
你可以试试
(\d{9}\d{3}?)
Run Code Online (Sandbox Code Playgroud)
匹配9然后可选的额外3位数
要么
((\d{3}){3,4})
Run Code Online (Sandbox Code Playgroud)
匹配3或4组3位数