2016-12-07 39 views
1

我正在使用正則表達式來提取大學名稱。主要觀察到兩種模式。如何優先考慮正則表達式模式

  1. 「一些名字」 大學 - >例如:安娜大學
  2. 大學的 「東西」 - >例如:埃克塞特

對於這個大學,我已經寫了兩個模式爲,

regex = re.compile('|'.join([r'[Uu]niversity of (\w+){1,3}',r'(?:\S+\s){1,3}\S*[uU]niversity'])) 

但在少數情況下,我沒有得到正確的預期答案。 例如,

sentence = "Biology Department University of Vienna" 

對於這句話,應用上述正則表達式,我得到

"Biology Department University" 

這是不對的。我覺得,因爲兩種模式都會匹配,第二種模式會得到匹配,並且會提取短語。

我需要優先考慮第一種模式,以便在類似場景中提取「某物的大學」。

任何人可以幫助

回答

4

一般情況下,正則表達式中交替從左至右評估,因此最左邊的替代品首先檢查,讓他們優先。不過,你已經這麼做了 - 爲什麼你仍然從替補的右側獲得了這場比賽的原因是該比賽可能在比賽中早些時候進行。

因此,您需要更具體,只有在沒有of的情況下才允許"Foo University"匹配。您可以使用以下negative lookahead assertion

regex = re.compile('|'.join([r'university of (\w+){1,3}', 
          r'(?:\S+\s){1,3}\S*university(?!\s+of\b)']), 
        flags=re.I)