如何在python中改进那个正则表达式?

时间:2015-03-10 20:08:47

标签: python regex

我需要一个符合该条件的正则表达式:

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

但在我内心深处,我现在非常难看。你们/女孩能帮我找到一个优雅的解决方案吗?

5 个答案:

答案 0 :(得分:2)

为什么不呢?

\d+(?:,\d+)* members?

如果您希望验证数字是否为三个一组:

\d+(?:,\d{3})* members?

(经过编辑,在评论中?每个Fredrik之后添加s

答案 1 :(得分:1)

\d+[,\d\s]+members?
  • \ d +匹配数字[0-9]
  • [,\ d \ s] +匹配下面列表中的单个字符    ,文字,     \ d匹配一个数字[0-9]和     \ s匹配任何空格字符[\ r \ n \ t \ f]

答案 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'