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

时间:2011-06-28 06:44:10

标签: python regex

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

( [0-9]{9} | [0-9]{12} )

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

3 个答案:

答案 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}?

没有太大的不同......