python 中的正则表达式与 grep 的功能不匹配

Regex in python not matching what grep does

我有以下字符串:

string1; 1.8w/v PEG_8000; string2; ;;

我想得到 ; 1.8w/v PEG_8000; 部分。我尝试了以下方法:

a =re.search(';[^.;]+PEG[^.;]+;','string1; 1.8w/v PEG_8000; string2; ;;'

其中 returns a = None.

我错过了什么?

(OS X Yosemite, Python 2.7)

编辑: 我之前说过以下内容,但我发现这不是真的。我忘了我在尝试之前编辑了字符串。

The funny thing is, if I do grep -E --color ';[^.;]+PEG[^.;]+;' file, where file contains the string, it can highlight it.

编辑 2: 我有一个包含此类字符串的巨大文件,其中关键字 PEG 不一定出现在第二个字段中。这就是为什么我不使用 split(';').

您需要从第一个字符 class 中删除点。因为分号和子字符串 PEG 之间存在一个点,导致正则表达式失败。请注意,字符 class 中出现的点仅匹配文字点。

>>> re.search(r';[^;]+PEG[^.;]+;','string1; 1.8w/v PEG_8000; string2; ;;').group()
'; 1.8w/v PEG_8000;'

没有re的方法:

>>> s='string1; 1.8w/v PEG_8000; string2; ;;'
>>> ';'+s.split(';')[1]+';'
'; 1.8w/v PEG_8000;'

否定字符 class 匹配所有 除了 这些指定字符。因此文字 . 是这里的问题所在。您可以按如下方式修改您的正则表达式:

>>> import re
>>> s = 'string1; 1.8w/v PEG_8000; string2; ;;'
>>> re.search(';[^;]+PEG[^;]+;', s).group()
'; 1.8w/v PEG_8000;'