我使用正则表达式来提取大学名称。主要观察到两种模式。
为此,我写了两个模式,
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"
这是错误的。我觉得,因为两个模式都会匹配,所以第二个模式匹配并提取短语。
我需要优先考虑第一种模式,以便在类似的场景中提取“某事物的大学”。
任何人都可以提供帮助
答案 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)