簡體   English   中英

如何改善python中的正則表達式?

[英]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 +匹配數字[0-9]
  • [,\\ d \\ s] +匹配下面列表中的單個字符,文字字符\\ d匹配數字[0-9],\\ s匹配任何空白字符[\\ r \\ n \\ t \\ f]

您也可以嘗試以下操作:

(\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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM