python中十六进制字符串的正则表达式不起作用

Dar*_*eis 5 python regex hex

我有一个正则表达式匹配字符串,如:

--D2CBA65440D

--77094A27E09

--77094A27E

--770

--77094A27E09--

基本上,它匹配由一个或多个换行符或空格包围的十六进制字符串,并且具有前缀 - 并且可能有也可能没有 - 作为后缀

我使用以下python代码,它在大多数情况下工作正常:

hexaPattern = "\s--[0-9a-fA-F]+[--]?\s"
hex = re.search(hexaPattern, part)
if hex:
   print "found a match"
Run Code Online (Sandbox Code Playgroud)

这适用于以上所有但是它不匹配--77094A27E09在这个块中:

<div id="arrow2" class="headerLinksImg" style="display:block

--77094A27E09

;">
Run Code Online (Sandbox Code Playgroud)

但匹配相同的字符串:

<input type="checkbox" name="checkbox" id="checkboxKG3" class

--77094A27E09

Content-T="checkboxKG" value="KG3" />
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?

ste*_*eha 10

import re
hexaPattern = re.compile(r'\s--([0-9a-fA-F]+)(?:--)?\s')
m = re.search(hexaPattern, part)
if m:
   print "found a match:", m.group(1)
Run Code Online (Sandbox Code Playgroud)

这预先编译了速度模式.这使用r''(原始字符串),因此反斜杠肯定会正确传递.这会添加括号以创建"匹配组",以便您可以在匹配后提取十六进制字符串; 它还在第二个--字符串周围添加了一个"不匹配的组" .

因为你使用了第二个" - "周围的方括号,你得到了一个"字符类".我不确定角色类[--]匹配的是什么; 我认为它应该匹配任何'-'角色.在一个字符类中,' - '通常用于一个范围,[a-z]但是范围[--]没有意义,所以我认为它会回落到只匹配一个'-'.问题是:因为你有它?后面,它只匹配零个或一个'-'字符,你需要它能够匹配两个.

  • 值得一提的是,如果您使用了很多不同的模式,则只需要编译该模式。根据 [python re docs](https://docs.python.org/2/library/re.html#re.compile),这些值被缓存,所以如果你只使用几个模式,编译它们就赢了对你没多大作用。 (2认同)

Dar*_*eis -2

我使用了以下内容:

pattern = re.compile(r'(\n--)([0-9A-F]+)(--)?', re.I | re.S | re.M)
Run Code Online (Sandbox Code Playgroud)

效果很好。感谢您的所有贡献。