我想在磁盘上搜索名为“AcroTray.exe”的文件。如果文件位于“Distillr”以外的目录中,程序应打印警告。 我使用以下语法执行否定匹配
(?!Distillr)
问题在于,虽然我使用“!”它总是产生一个MATCH。我试图使用IPython找出问题,但失败了。 这就是我试过的:
import re
filePath = "C:\Distillr\AcroTray.exe"
if re.search(r'(?!Distillr)\\AcroTray\.exe', filePath):
print "MATCH"
它打印一个MATCH。 我的正则表达式有什么问题?
我希望得到一个匹配:
C:\SomeDir\AcroTray.exe
但不是:
C:\Distillr\AcroTray.exe
答案 0 :(得分:1)
使用否定 lookbehind ((?<!...)
),而不是否定前瞻:
if re.search(r'(?<!Distillr)\\AcroTray\.exe', filePath):
匹配:
In [45]: re.search(r'(?<!Distillr)\\AcroTray\.exe', r'C:\SomeDir\AcroTray.exe')
Out[45]: <_sre.SRE_Match at 0xb57f448>
这不匹配:
In [46]: re.search(r'(?<!Distillr)\\AcroTray\.exe', r'C:\Distillr\AcroTray.exe')
# None
答案 1 :(得分:0)
您正在尝试使用否定型后视:(?<!Distillr)\\AcroTray\.exe
答案 2 :(得分:0)
你想看看背后的,而不是前瞻。像这样:
(?<!Distillr)\\AcroTray\.exe
答案 3 :(得分:0)
(?mx)^((?!Distillr).)*$
查看您提供的示例,我将它们用作示例here