Python Regex在字符串的开头不匹配?

时间:2013-03-21 18:12:49

标签: python regex python-2.7

我正在使用正则表达式提取数据的二进制文件,我遇到了正则表达式无法跟踪的问题。

这是我遇到问题的代码:

        z = 0
        for char in string:
            self.response.out.write('|%s' % char.encode('hex'))
            z+=1
            if z > 20:
                self.response.out.write('<br>')
                break

        title = []
        string = re.sub('^\x72.([^\x7A]+)', lambda match: append_match(match, title), string, 1)
        print_info('Title', title)

def append_match(match, collection, replace = ''):
    collection.append(match.group(1))
    return replace

这是运行时字符串中前20个字符的内容:

| 72 | 0A | 50 | 79 | 72 | 65 | 20 | 54 | 72 | 1207 | 6C | 6C | 7A | 19 | 54 | 72 | 1207 | 6C | 6C | 62 | 6C

它不返回任何内容,除非我删除^,在这种情况下它返回“Troll”(不是引号),即54726F6C6C。它应该在我阅读时将所有内容返回到\ x7a。

这里发生了什么?

1 个答案:

答案 0 :(得分:2)

问题是默认情况下,\x0A(=换行符)不会与点匹配。尝试将dotall flag添加到您的模式中,例如:

re.sub('(?s)^\x72.([^\x7A]+)....