[英]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,})
有時可能需要也可能不需要添加/刪除/移動括號來獲得優先權。 按照我寫的方式,您有一組捕獲數字字符串或大寫字母的組。 在學習規則時(實際上,即使您已經學習了規則),查看正則表達式可視化工具/調試器(如我所使用的可視化工具/調試器)也會很有幫助。
您的規則稍微復雜一點:您需要2個或更多大寫字母,並在第一個空格前加上一個連字符。 照原樣編寫有點困難,但是如果將其更改為兩個或多個大寫字母,零個或多個非空格字符以及一個連字符,這很容易:
^(\d+|[A-Z]{2,}\S*?-)
(請注意\\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.