Python:当从文件中读取Input时,如何使此正则表达式工作

时间:2012-07-27 20:26:29

标签: python regex

>>> 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'
[]

2 个答案:

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