[英]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.