繁体   English   中英

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

[英]Is the better way to match two different repetitions of the same character class in a regex?

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

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

是否有更简洁的正则表达式来表示这一点?

您可以使用保存一个字符

[0-9]{9}([0-9]{3})?

但在我看来,你的方式更好,因为它更清楚地传达了你的意图。 正则表达式已经很难阅读了。

当然,您可以使用\d而不是[0-9]

(编辑:我首先认为您可以将括号放在[0-9]{3}附近,但您不能;问号将被忽略。所以您只保存一个字符,而不是三个。)

(编辑 2:您还需要使用^$ (或\b )锚定正则表达式,否则re.match()也将匹配123456789内的1234567890 。)

你可以试试

(\d{9}\d{3}?)

匹配 9,然后是可选的额外 3 位数字

或者

((\d{3}){3,4})

匹配 3 组或 4 组 3 位数字

你可以这样做:

[0-9]{9}[0-9]{3}?

没有太大的不同吧...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM