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

Bhi*_*sen 2 python regex

我正在使用正则表达式来提取大学名称.主要观察到两种模式.

  1. "某些名字"大学 - >前:安娜大学
  2. 大学"某事" - >前:埃克塞特大学

为此,我写了两个模式,

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

但在少数情况下,我没有得到适当的预期答案.例如,

sentence  = "Biology Department University of Vienna"
Run Code Online (Sandbox Code Playgroud)

对于这句话,我正在使用正则表达式

"Biology Department University"
Run Code Online (Sandbox Code Playgroud)

这是错的.我觉得,由于两个模式都匹配,第二个模式匹配并提取短语.

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

任何人都可以帮忙

Tim*_*ker 8

通常,正则表达式中的替换从左到右进行计算,因此首先检查最左边的替换,给予它们优先级.但是你已经这样做了 - 你仍然从交替的右侧得到匹配的原因是在字符串中可以提前匹配.

因此,您需要更具体,"Foo University"只有在不of遵循时才允许匹配.您可以使用负前瞻断言:

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