提取多个垂直条之间的所有数据

时间:2018-01-22 16:18:48

标签: python regex

我有一个混合了ASCII和十六进制数据的字符串。我想以字节为单位计算字符串的长度。两个垂直条之间的数据代表HEX数据。

示例:s =" 2 | 00 00 00 06 00 00 00 |驱动器| 24 00 |"。对于此字符串,长度应为16个字节,因为两个十六进制数字表示一个字节。我尝试使用正则表达式在条形图之间提取数据:r' |。(。*?)|'但这匹配整个字符串。有帮助吗?谢谢

import re
s= "2|00 00 00 06 00 00 00|Drives|24 00|"
match = re.findall(r'|.(.*?)|', s)

2 个答案:

答案 0 :(得分:1)

我认为你必须逃避| \|以匹配管道,否则就意味着or。您也可以忽略此部分|.(

中的点
import re
s= "2|00 00 00 06 00 00 00|Drives|24 00|"
print(re.findall(r'\|(.*?)\|', s))

Output

答案 1 :(得分:1)

你可以改变你的方法,实际上表示十六进制数字。一对可以定义为

[a-f0-9]{2}
# a-f and 0-9 twice

<小时/> 现在,您只需要双方的边界并使其不区分大小写,Python可以

import re

s = "2|00 00 00 06 00 00 00|Drives|24 00|"

rx = re.compile(r'(?i)(\b[a-f0-9]{2}\b)')

byte = len(rx.findall(s))
print(byte)

<小时/> 对于你的字符串,这会产生

9

请参阅a demo on regex101.com