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

如何编写Python正则表达式实现含<br>的结构化文本正确分组提取

正则表达式合并多行字段问题解决

问题场景

现有一段包含多字段的文本,常规字段以[字段名]:[内容]<br>格式存在,但Additional Information字段的内容跨了多个<br>片段。当前正则会将这些片段拆分成独立项,需要把该字段下的所有内容合并为单个项,直到下一个带冒号的字段出现。

现有代码

import re

txt = "Person:Tester Test<br>Count:1<br>Testing:test<br>Additional Information:test1<br>test2<br>test3<br>Temp:123<br>"
x = re.findall("(.*?<br>)", txt)

for i in x:
 print("- " + i)

当前输出

- Person:Tester Test<br>
- Count:1<br>
- Testing:test<br>
- Additional Information:test1<br>
- test2<br>
- test3<br>
- Temp:123<br>

期望输出

- Person:Tester Test<br>
- Count:1<br>
- Testing:test<br>
- Additional Information:test1<br>test2<br>test3<br>
- Temp:123<br>

解决方案

利用**正向预查(lookahead)**精准匹配到下一个字段开头前的所有内容,对应的正则表达式和修改后代码如下:

修改后的代码

import re

txt = "Person:Tester Test<br>Count:1<br>Testing:test<br>Additional Information:test1<br>test2<br>test3<br>Temp:123<br>"
# 匹配字段名+内容,直到下一个字段名或文本结束
x = re.findall(r"(.+?:.*?(?=(?:\w+:)|\Z))", txt, re.DOTALL)

for i in x:
 print("- " + i)

正则表达式说明

  • .+?::匹配字段名(至少1个字符,非贪婪匹配到冒号)
  • .*?:匹配字段内容,非贪婪模式避免过度匹配
  • (?=(?:\w+:)|\Z):正向预查,定位到下一个字段名(\w+:)或文本结尾(\Z)的位置,确保内容不会包含下一个字段的开头
  • re.DOTALL:让.能匹配任意字符(包含换行,这里确保<br>后的内容被完整匹配)

运行结果

- Person:Tester Test<br>
- Count:1<br>
- Testing:test<br>
- Additional Information:test1<br>test2<br>test3<br>
- Temp:123<br>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 01:31:22