regex - 重新搜索找不到带字母的十六进制字节[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 似乎有效,但我想知道是否有办法让重新搜索也能工作
解决方案
'\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 演示。
推荐阅读
- php - php加载api非常慢
- git - 如果整个文件夹结构发生更改,git 如何管理更改?
- weblogic12c - Weblogic 12c WLST 离线创建用户
- azure - Xamarin:如何在 Xamarin 跨平台应用程序中播放 .ism/manifest 文件
- html - 下载excel文件后如何重新加载页面?
- nginx - 使用 Nginx 仅将桌面流量重定向到 HTTPS
- emacs - Orgmode Agenda 自定义命令不起作用并显示预定项目
- openmdao - MPI - 并行驱动程序的缩放 DOEDriver
- postgresql - 将自动增量列添加到按日期排序的现有表中
- java - 比较时出现“Illegal generic type for instanceof”错误