[英]How to improve that regular expression in python?
我需要一个符合该条件的正则表达式:
1 member
2 members
10 members
100 members
1,000 members
10,000 members
100,000 members
100,000,000 members
999,999,999,999 members
所以我做了:
\d+ member|
\d+ members|
\d+,\d+ members|
\d+,\d+,\d+ members|
\d+,\d+,\d+,\d+ members
您可以在此处以交互方式查看它: https : //regex101.com/r/oW3bJ6/2
但是我内心深处现在我很难受。 你们可以帮我找到一个优雅的解决方案吗?
为什么不只是这个呢?
\d+(?:,\d+)* members?
如果您希望验证数字是否为三位一组:
\d+(?:,\d{3})* members?
(已编辑,在评论中s
每位Fredrik后面加上?
)
\d+[,\d\s]+members?
您也可以尝试以下操作:
(\d|,)+ members?
首先, (\\d|,)+
将匹配任何十进制数字或,
一个或更多次,那么正则表达式匹配的空间中,然后或多个成员( ?
指s
可发生0或1次)。
这将匹配列表中的所有内容:
\\ d +(,\\ d {3})*成员?
但它也将匹配:1个成员
可以接受吗? 如果没有,您可以使用:
1个成员| \\ d +(,\\ d {3})*成员
我不确定您需要多大的表情,但是您接受的答案会给您关于示例的错误肯定。 即,以下几行将匹配 ; 是否可以接受取决于您:
1 members # Plural members for '1'
5 member # Non-plural member
1000,0 members # Invalid comma separator
1000000 members # Missing comma separator
00000 members # Multiple zeros (or any other number)
010 member # Leading zeros
1, 1 member # Invalid
以下正则表达式将匹配示例中所述的确切模式:
^1 member|^[1-9]\d{0,2}(,\d{3})* members
^
确保我们从行首开始匹配。
1 member
是特殊的非复案
[1-9]\\d{0,2}
匹配数字1-999,但不匹配以0开头的表达式(例如0或010)...
(,\\d{3})*
然后是任意数量的'000-999'组
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.