5

ディスク上で「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

4 に答える 4

1

否定先読みではなく、否定後読み( (?<!...))を使用します。

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
于 2013-03-20T20:41:08.730 に答える
0

否定的な後読みを使用しようとしています:(?<!Distillr)\\AcroTray\.exe

于 2013-03-20T20:41:19.050 に答える
0

先読みではなく、後ろを見る必要があります。このような:

(?<!Distillr)\\AcroTray\.exe
于 2013-03-20T20:41:37.543 に答える
0

(?mx)^((?!Distillr).)*$

あなたが提供した例を見て、ここで例として使用します

于 2013-03-20T20:42:59.133 に答える