如何优先考虑正则表达式模式而不是另一种模式

时间:2016-12-07 06:43:02

标签: python 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"
    

    这是错误的。我觉得,因为两个模式都会匹配,所以第二个模式匹配并提取短语。

    我需要优先考虑第一种模式,以便在类似的场景中提取“某事物的大学”。

    任何人都可以提供帮助

1 个答案:

答案 0 :(得分:8)

通常,正则表达式中的替换从左到右进行评估,因此首先检查最左边的替代项,为它们赋予优先级。但是你已经这样做了 - 你仍然从交替的右边得到匹配的原因是在字符串的早期可以匹配。

因此,您需要更加具体,只有在"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)