首页 > 解决方案 > 重新搜索找不到带字母的十六进制字节[python 3.6]

问题描述

pattern = b'\x08\x00\x2a\x00'
re.search(b'\x08', pattern).end()
>> 1

re.search(b'\x2a',pattern).end()
>> error: nothing to repeat at position 0

我正在尝试在 dicom 文件中搜索字节模式,如果它包含十六进制值 af,则会出现错误。

使用 str.find 似乎有效,但我想知道是否有办法让重新搜索也能工作

标签: regexpython-3.x

解决方案


'\x2a'是一个表示*字符的转义序列。它是一个将前面的模式重复 0 次或更多次的量词。你想匹配一个*字符,所以你可以告诉正则表达式引擎搜索一个转义的*, b'\\\x2a',一个表示\*文字字符串的常规字符串文字,或者使用一个带有正则表达式转义的十六进制实体, rb'\x2a',一个原始字符串文字,代表一个文字\x2a字符串。

print(re.search(rb'\x2a',b'\x08\x00\x2a\x00').end())  # => 3
print(re.search(b'\\\x2a',b'\x08\x00\x2a\x00').end()) # => 3

请参阅Python 3 演示


推荐阅读