我有以下字符串:
Release Notes</h1>
<h2><a class="anchor" id="subsecRN042"></a>
V0.0.42 (ADK 1.0.1)</h2>
<ul>
<li>Fix for buffer level drop due to interference causing HD to under run </li>
<li>Improve recovery mechanism for HD when buffer level is too low</li>
</ul>
<h2><a class="anchor" id="subsecRN041"></a>
V0.0.41 (ADK 1.0.0)</h2>
<ul>
<li>Resolve issue with writing to MSI area of flash in ATE</li>
</ul>
我正在尝试对版本号进行分组,例如,一个组将包含以下内容:
V0.0.42 (ADK 1.0.1)
然后以下组将包含发行说明,例如,以下组将包含:
Fix for buffer level drop due to interference causing HD to under run
Improve recovery mechanism for HD when buffer level is too low
我正试图在整个文档中搜索和匹配。所以最终的目标是每场比赛有2-3组。
匹配1:
Group 1 = V0.0.42 (ADK 1.0.1)
Group 2 = Fix for buffer level drop due to interference causing HD to under run, Improve recovery mechanism for HD when buffer level is too low
比赛2:
Group 1 = V0.0.41 (ADK 1.0.0)
Group 2 = Resolve issue with writing to MSI area of flash in ATE
有谁知道这样做的方法?我现在已经尝试了大约2个小时,运气很少。接近,只是没有找到答案。我得到了最接近的表达式:
r'^(V.+)</h2>\s<ul>\s((?:<li>.+</li>\s){0,})'
但我似乎无法找到摆脱标识符的方法:
<li> and </li>
任何帮助将不胜感激。感谢。
答案 0 :(得分:0)
尝试使用正则表达式删除<li>
和<\li>
可能意味着只有<li>
标记中的最后一个部分才会被.+
位捕获,因为重复性质意味着只有满足捕获组要求的最后一个部分才会被捕获组捕获(http://www.regular-expressions.info/captureall.html)。
因此,如果你想坚持在第一阶段使用正则表达式,可以使用string.replace(例如:regexResult.replace('<li>','')
),或者re模块的re.split(例如{{ 1}})生成多个字符串?
编辑:为了澄清,第一段考虑使用re.split('<\/*li>',regexResult)
或类似的正则表达式,将^(V.+)</h2>\s<ul>\s((?:<li>(.+)</li>\s){0,})
视为捕获组