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;'
我有以下字符串:
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
, wherefile
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;'