使用正则表达式与负前瞻部分匹配

Partial match with negative lookahead using regex

使用负前瞻的正则表达式我必须搜索一个文本文件并识别一个部分已知的文本行,该文本行后面没有另一行部分已知的文本。这是文本文件的简化示例:

blahblahblah.Name=qwqwqwqwqw
abracadabra.Surname=ererererer
zxzxzxzxzx.Name=kmkmkmkmkmkm
oioioioi.Name=dfdfdfdfdfdf
popopopopopopo.Surname=lklklklklklklk

在上面的示例中,您可以看到带有 Name 的行后面应该始终跟有带有 Surname 的行的模式,但有时它不会发生。我必须确定那些 "Name lines" 后面没有 "Surname lines".

我在 Eclipse 中使用文件搜索(它支持正则表达式)。

我想这是我最好的尝试之一,但它仍然没有成功:

(Name.*\n)(?!.*Surname)

请分享您的想法。 亲切的问候。

.*\bName=.*\n(?!.*\bSurname=) 就行了。

下面是 Python 中的示例。

import re
s='''blahblahblah.Name=qwqwqwqwqw
abracadabra.Surname=ererererer
zxzxzxzxzx.Name=kmkmkmkmkmkm
oioioioi.Name=dfdfdfdfdfdf
popopopopopopo.Surname=lklklklklklklk'''
print(re.findall(r'\bName=.*\n(?!.*\bSurname=)', s))

这输出:

['zxzxzxzxzx.Name=kmkmkmkmkmkm\n']

这是一个面向行的负前瞻:

^(.*\.Name.*)[\r\n]+(?!.*\.Surname)

Demo