Python匹配字符串,如果它不以X开头

时间:2013-03-20 20:38:50

标签: python regex match

我想在磁盘上搜索名为“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

4 个答案:

答案 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