2014-11-25 27 views
1

我可能不會說這個權利(我是一個總的正則表達式新手)。這是我目前擁有的代碼:Python的正則表達式:使用或聲明

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

我想添加到正則表達式,所以它看起來在任「\ d +」(以數字開頭)或它與2個大寫字母開頭,幷包含一個「 - '在第一個空格之前。我有大寫字母的正則表達式:

^[A-Z]{2,} 

但我不知道如何添加' - '和使用\ d +做OR。這有意義嗎?謝謝!

+0

你可以舉一些例子匹配和未命中。 – Victory 2014-11-25 00:47:33

回答

1

在正則表達式做一個或方法是使用「交替」或「管道」運營商,|

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

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

Regular expression visualization

Debuggex Demo

您可能會或可能不會有時需要添加/刪除/移動圓括號以獲得優先權。按照我寫的方式,你有一個組可以捕獲數字字符串或大寫字母。在你學習規則的時候(事實上,即使在你學習規則之後),看看像我使用的那樣的正則表達式可視化器/調試器是有幫助的。


你的規則是稍微複雜一些:你要2個或多個大寫字母,以及第一空間之前連字符。這是一個有點難以原樣寫,但如果你將其更改爲兩個或更多個大寫字母,零個或多個非空格字符,連字符,這很簡單:

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

Regular expression visualization

Debuggex Demo

(注意\S*? - 即意味着我們要去而不是儘可能多的匹配儘可能少的字符越好,所以我們將只匹配到第一連字符THIS-IS-A-TEST,而不是到最後如果你想要另一個,就放下?。)

+0

它不符合這種條件'在第一個空格之前包含' - ' – 2014-11-25 00:52:47

+0

@alphabravo:請參閱編輯後的版本。 OP問了兩個具體問題,我按順序分別回答了他們。 – abarnert 2014-11-25 00:53:58

1

|爲「或」。對於零個或多個非空白字符序列,請寫\S*

re.compile('^(\d+|[A-Z][A-Z]\S*-\s)') 
0
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