簡體   English   中英

Python正則表達式:使用或語句

[英]Python regex: using or statement

我可能不是在說這個權利(我是一名正則表達式新手)。 這是我目前擁有的代碼:

bugs.append(re.compile("^(\d+)").match(line).group(1))

我想添加到正則表達式中,以便它以'\\ d +'(以數字開頭)或以2個大寫字母開頭並且在第一個空格之前包含'-'的形式顯示。 我有大寫字母的正則表達式:

^[A-Z]{2,}

但我不確定如何添加'-'並與\\ d +進行“或”運算。 這有意義嗎? 謝謝!

| 為“或”。 對於零個或多個非空白字符的序列,請寫\\S*

re.compile('^(\d+|[A-Z][A-Z]\S*-\s)')

在正則表達式中執行“或”的方法是使用“ alternation”或“ pipe”運算符|

例如,要匹配一個或多個數字或兩個或多個大寫字母:

^(\d+|[A-Z]{2,})

正則表達式可視化

Debuggex演示

有時可能需要也可能不需要添加/刪除/移動括號來獲得優先權。 按照我寫的方式,您有一組捕獲數字字符串或大寫字母的組。 在學習規則時(實際上,即使您已經學習了規則),查看正則表達式可視化工具/調試器(如我所使用的可視化工具/調試器)也會很有幫助。


您的規則稍微復雜一點:您需要2個或更多大寫字母,並在第一個空格前加上一個連字符。 照原樣編寫有點困難,但是如果將其更改為兩個或多個大寫字母,零個或多個非空格字符以及一個連字符,這很容易:

^(\d+|[A-Z]{2,}\S*?-)

正則表達式可視化

Debuggex演示

(請注意\\S*? -這意味着我們將匹配盡可能少的字符,而不是盡可能多的字符,因此我們只匹配THIS-IS-A-TEST第一個連字符,而不是到最后一個。如果要另一個,只需將?放下。

re.compile(r"""
^  # beginning of the line
(?:  # non-capturing group; do not return this group in .group()
 (\d+)  # one or more digits, captured as a group
|  # Or
 [A-Z]{2}  # Exactly two uppercase letters
 \S*  # Any number of non-whitespace characters
 -  # the dash you wanted
)  # end of the non-capturing group
""",
re.X)  # enable comments in the regex

暫無
暫無

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

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