使用正则表达式进行局部匹配,负向提前

时间:2018-07-05 21:09:31

标签: regex negative-lookahead

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

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

在上面的示例中,您可以看到以下模式:带有 Name 的行应始终跟有带有 Surname 的行,但有时不会发生。我必须确定那些“名称行”后面没有“姓氏行”。

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

我想这是我最好的尝试之一,但仍然不能解决问题:

  

(名称。* \ n)(?!。*姓氏)

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

2 个答案:

答案 0 :(得分:3)

这是面向行的负前瞻:

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

Demo

答案 1 :(得分:2)

.*\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']