我有一个正则表达式匹配字符串,如:
--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]但是范围[--]没有意义,所以我认为它会回落到只匹配一个'-'.问题是:因为你有它?后面,它只匹配零个或一个'-'字符,你需要它能够匹配两个.
Dar*_*eis -2
我使用了以下内容:
pattern = re.compile(r'(\n--)([0-9A-F]+)(--)?', re.I | re.S | re.M)
Run Code Online (Sandbox Code Playgroud)
效果很好。感谢您的所有贡献。
| 归档时间: |
|
| 查看次数: |
24847 次 |
| 最近记录: |