我需要一个符合该条件的正则表达式:
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
但在我内心深处,我现在非常难看。你们/女孩能帮我找到一个优雅的解决方案吗?
答案 0 :(得分:2)
为什么不呢?
\d+(?:,\d+)* members?
如果您希望验证数字是否为三个一组:
\d+(?:,\d{3})* members?
(经过编辑,在评论中?
每个Fredrik之后添加s
答案 1 :(得分:1)
\d+[,\d\s]+members?
答案 2 :(得分:1)
你也可以试试这个:
(\d|,)+ members?
首先,(\d|,)+
将匹配任何十进制数字或,
一次或多次,然后正则表达式将匹配空格,然后成员或成员(?
表示{{1}可以发生0或1次)。
答案 3 :(得分:0)
这将匹配列表中的所有内容:
\ d +(,\ d {3})*会员?
但它也会匹配: 1名成员
这可以接受吗?如果没有,您可以使用:
1名成员| \ d +(,\ d {3})*成员
答案 4 :(得分:0)
我不确定你的言语是多么迂腐,但你接受的答案会给你一些与你的榜样有关的误报。即,以下几行将匹配;这是否可以接受取决于你:
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'