在正则表达式中匹配同一个字符类的两个不同重复的更好方法是什么?

Fra*_*ery 6 python regex

我一直[0-9]{9,12}用来表示数字字符串的长度为9或12个字符.但是我现在意识到它将匹配长度为10或11的输入字符串.所以我出来了天真:

( [0-9]{9} | [0-9]{12} )
Run Code Online (Sandbox Code Playgroud)

是否有更简洁的正则表达式来代表这个?

Tim*_*ker 7

您可以使用保存一个字符

[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.)


tob*_*ies 6

你可以试试

(\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位数