我正在使用正则表达式提取数据的二进制文件,我遇到了正则表达式无法跟踪的问题。
这是我遇到问题的代码:
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。
这里发生了什么?
答案 0 :(得分:2)
问题是默认情况下,\x0A
(=换行符)不会与点匹配。尝试将dotall flag添加到您的模式中,例如:
re.sub('(?s)^\x72.([^\x7A]+)....