You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python正则提取子串前后内容:分组匹配异常问题求助

正则匹配问题解决方案

你的正则无法得到预期结果,核心原因是第一个捕获组的.*?会跨<li>标签匹配,把中间不含URL的<li>Two</li>也包含进去,导致分组错误。

修正后的代码

import re
txt = '&lt;li&gt;one. URL : &lt;a href=&quot;http://local.ru&quot;&gt;http://local.ru&lt;/a&gt; (10.02.2022).&lt;/li&gt;&lt;li&gt;Two&lt;/li&gt;&lt;li&gt;Three. URL : &lt;a href=&quot;https://local.ru&quot;&gt;https://local.ru&lt;/a&gt; (15.11.2021).&lt;/li&gt;'
result = re.findall(r'(&lt;li&gt;(?:(?!&lt;/li&gt;).)*?)\s?URL\s?:\s?(&lt;a.*?&gt;).*?(&lt;/a&gt;.*?&lt;/li&gt;)', txt)
print(result)

关键修改说明

把第一个捕获组的.*?替换为(?:(?!&lt;/li&gt;).)*?:

  • (?:...)是非捕获分组,用于包裹断言逻辑
  • (?!&lt;/li&gt;)是负向前瞻,确保当前位置后面不是&lt;/li&gt;
  • 整个片段的作用是:匹配&lt;li&gt;开头的内容,只匹配到当前<li>内部、URL标识之前的部分,不会跨越到其他<li>标签

运行后将得到你期望的输出:

[('&lt;li&gt;one.', '&lt;a href=&quot;http://local.ru&quot;&gt;', '&lt;/a&gt; (10.02.2022).&lt;/li&gt;'),
 ('&lt;li&gt;Three.', '&lt;a href=&quot;https://local.ru&quot;&gt;', '&lt;/a&gt; (15.11.2021).&lt;/li&gt;')]

内容的提问来源于stack exchange,提问作者Vadim Nva

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.23 04:15:21