簡體   English   中英

Python正則表達式匹配變量模式

[英]Python regex to match variable pattern

我正在嘗試編寫一個匹配兩種模式的python正則表達式:第一個是scratch_alpha ,第二個是scratch_alpha1*12 (其中12可以是任何十進制數字),我想將*后面的值放在變量內,如果在*之后檢測到scratch_alpha,只需在變量中寫入1

我寫了這個正則表達式: ([a-zA-Z0-9\\_*]+)(\\*\\d+)?

我希望在此之后得到兩個組,第一個組將是名稱“ scratch_alpha”,第二個組將是*或None之后的數字(如果為None,則將變量初始化為1)。

但是在我的正則表達式中,似乎第一組包含了所有內容(scratch_alpha * 12),而第一組中沒有scratch_alpha,第二組中沒有value。

嘗試以下正則表達式: ([^*]+)\\*(\\d+)

  • 第一組:所有字符,直到*
  • 第二組: *后的所有數字

正則表達式演示1


更新

滿足您對圖案的要求

  • scratch_alpha
  • scratch_alpha1*12
    • *后的捕獲號碼
    • *后的數字是可選的

您可以嘗試以下正則表達式:

scratch_alpha(?:(?:\\d+)?\\*(\\d+)?)?

如果捕獲組為空,則*后面沒有數字,您可以使用1初始化變量。

正則表達式演示2

第一組不需要*

([a-zA-Z0-9\_]+)(\*\d+)?

您還可以更改(\\*\\d+)? (\\*(\\d+))? 如果要在*之前和之后分別輸入字符。

發生這種情況的原因是,在第一個括號內放置了+ ,這意味着至少出現了一次或多次。 並且由於您的第二個括號有一個? ,第二組是可選的。 因此,將其省略,因為您的第一個括號可以匹配您的整個字符串,而第二個括號則不需要匹配任何內容。

您可以通過從[]刪除*來解決此問題,這樣它就不會被匹配,並且您的第一個括號中的*也不會被匹配。 因此,現在您的正則表達式將是([a-zA-Z0-9\\_]+)(\\*\\d+)?

希望這可以幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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