1

我有一个模式编译为

pattern_strings = ['\xc2d', '\xa0', '\xe7', '\xc3\ufffdd', '\xc2\xa0', '\xc3\xa7', '\xa0\xa0', '\xc2', '\xe9']
join_pattern = '|'.join(pattern_strings)
pattern = re.compile(join_pattern)

然后我在文件中找到模式

def find_pattern(path):
    with open(path, 'r') as f:
        for line in f:
            print line
            found = pattern.search(line)
            if found:
                print dir(found)
                logging.info('found - ' + found)

我作为path文件的输入是

\xc2d 
d\xa0 
\xe7 
\xc3\ufffdd 
\xc3\ufffdd 
\xc2\xa0 
\xc3\xa7 
\xa0\xa0 
'619d813\xa03697' 

当我运行这个程序时,什么也没有发生。

我无法捕捉到这些模式,我在这里做错了什么?

期望的输出 ——每一行,因为每一行都有一个或另一个匹配模式

更新

将正则表达式更改为

pattern_strings = ['\\xc2d', '\\xa0', '\\xe7', '\\xc3\\ufffdd', '\\xc2\\xa0', '\\xc3\\xa7', '\\xa0\\xa0', '\\xc2', '\\xe9']

还是一样,没有输出

更新

在制作正则表达式后

pattern_strings = ['\\xc2d', '\\xa0', '\\xe7', '\\xc3\\ufffdd', '\\xc2\\xa0', '\\xc3\\xa7', '\\xa0\\xa0', '\\xc2', '\\xe9']
join_pattern = '[' + '|'.join(pattern_strings) + ']'
pattern = re.compile(join_pattern)

事情开始起作用了,但部分地,仍然没有捕捉到的模式是为了线

\xc2\xa0 
\xc3\xa7 
\xa0\xa0 

我的模式字符串是['\\xc2\\xa0', '\\xc3\\xa7', '\\xa0\\xa0']

4

2 回答 2

2

r"\xa0"使用或作为转义搜索模式中的 \"\\xa0"

做这个 ....

 ['\\xc2d', '\\xa0', '\\xe7', '\\xc3\\ufffdd', '\\xc2\\xa0', '\\xc3\\xa7', '\\xa0\\xa0', '\\xc2', '\\xe9']

就像每个人都说的那样,除了你也听过的那个人……

于 2012-07-27T18:24:12.640 回答
0

您的文件是否实际上包含\xc2d--- 即五个字符:反斜杠后跟 c,然后是 2,然后是 d?如果是这样,您的正则表达式将不匹配它。您的每个正则表达式都将匹配一个或两个具有特定字符代码的字符。如果你想匹配\xc2d你的正则表达式需要的字符串\\xc2d

于 2012-07-27T18:24:01.023 回答