2016-12-07 5 views
1

正規表現を使用して大学名を抽出しています。主に2つのパターンが観察される。regexパターンの優先順位を他のパターンよりも優先する方法

  1. "いくつかの名前" 大学 - >例: "何か" のアンナ大学
  2. 大学 - >例:エクセター
  3. このため

の大学、私のように二つのパターンが書かれています、

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" 

を取得しています。両方のパターンが一致するので、2番目のパターンが一致し、フレーズが抽出されます。

私は最初のパターンを優先する必要があるため、同様のシナリオで「何かの大学」が抽出されます。

誰もが一般的に

答えて

4

を助けることができ、正規表現での交替は、左から右に評価されているので、一番左の選択肢がそれらに優先して、最初にチェックされています。あなたはすでにそれをしました。なぜなら、交代の右側からまだマッチを得ている理由は、そのマッチがストリングの早い方で可能であるからです。

したがって、"Foo University"の一致は、ofがない場合にのみ、より具体的で一致するようにする必要があります。これには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) 
関連する問題