>>> line = '\xc2d sdsdfdslkfsdkfjdsf'
>>> pattern_strings = ['\xc2d', '\xe9']
>>> pattern = '|'.join(pattern_strings)
>>> pattern
'\xc2d|\xe9'
>>> import re
>>> re.findall(pattern, line)
['\xc2d']
当我将line
放入文件并尝试使用相同的正则表达式时,它不会显示任何内容
def find_pattern(path):
with open(path) as f:
for line in f:
line = line.strip()
pattern_strings = ['\xc2d', '\xe9'] # or using ['\\xc2d', '\xe9'] doesn't help
pattern = '|'.join(pattern_strings)
print re.findall(pattern, line)
其中path
是一个文件,如下所示
\xc2d sdsdfdslkfsdkfjdsf
我看到了
\xc2d
[]
d\xa0
[]
\xe7
[]
\xc3\ufffdd
[]
\xc3\ufffdd
[]
\xc2\xa0
[]
\xc3\xa7
[]
\xa0\xa0
[]
'619d813\xa03697'
[]
答案 0 :(得分:2)
line = "\xc2d bla"
是一个Python字符串,其中“\ xc2d”是一个包含2个字符的子字符串。
你的文件听起来像是文字字符串“\ xc2d”,它与那个模式不匹配。
如果你想匹配文字字符串,你需要匹配它的每个字符(所以,逃避斜线)。
pattern = r"\\xc2d"
答案 1 :(得分:1)
您需要以二进制模式f = open("myfile", "rb")
读取文件以阻止\x
转换,因为Python \xhh
代表hex escape characters。
非二进制读取失败 - 请检查here。