创建一个正则表达式,用于搜索转换为12位十六进制值的字符串

时间:2011-04-28 16:11:18

标签: python regex

我正在尝试创建一个regexp,用于搜索文件中的所有12位十六进制值。例如:string 448699 => hex 343438363939.我现在的正则表达式是:

(r'3[0-9]\d{10}')

它将第一个字符与第二个0-9匹配,接下来的10个是任意随机数字。上面的十六进制是12位数字,从第一个字符开始,每隔一个字符是3.如何用regexp表达。我正在考虑以下几点,但不确定:

(r'3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]3[0-9]')

3 个答案:

答案 0 :(得分:3)

你真的很亲密。你想要的模式是:

(r'(?:3\d){6}')

编辑 - 正如Mike Pennington所指出的,十六进制数字可以包括字母A-F。我实际上并不确定“每隔一个数字是3”规则的目的,所以我按照你所描述的那样保留了规则。

答案 1 :(得分:2)

混乱至高无上......

如果您想将 ANY 6字节序列的转换结果与12个十六进制数字字符串(您要求的)进行匹配,则需要[0-9a-fA-F]{12}

如果要将 ASCII十进制数字的6字节序列转换为12位十六进制数字字符串(示例代码所示),则需要{{1} }。

Nitpick:您应该使用(?:3[0-9]){6},就好像使用Unicode一样,它会拾取任何非ASCII十进制数字,这些数字不是十六进制数字(超过300种可能性)。

建议\d检测从(3[0-9a-fA-F]){6}中抽取的6字节字节序列,这不太可能是您想要的。

更新并要求澄清。

请考虑以下内容,让我们知道哪种模式实际上找到了您想要找到的内容,并且不会让“误报”通过大门。

0123456789:;<=>?

答案 2 :(得分:1)

你几乎就在那里......因为十六进制可以a-f你需要包含那些......

(r'(3[0-9a-fA-F]){6}')