2016-12-07 71 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)