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

Python多行文本正则匹配:捕获指定speakerA至votC区块内容

Python正则匹配跨多行文本解决方案

匹配规则明确

需要捕获的内容范围:

  • 起始:以包含投票关键词的speakerA行开头,关键词包括lets beginning to vote、go to vote、have voting、beginning to vote
  • 结束:到votC:行及其后续所有内容为止(直到下一个投票块起始行或文本结尾)

正则方案实现

针对需求,结合Python正则特性,使用以下模式:

import re

pattern = re.compile(
    r'^speakerA[::] (?:lets beginning to vote|go to vote|have voting|beginning to vote)\n.*?^votC:.*?(?=^speakerA[::] |\Z)',
    re.DOTALL | re.MULTILINE
)

关键参数与逻辑说明

  • re.DOTALL:让.匹配包括换行符在内的所有字符,解决跨多行匹配问题
  • re.MULTILINE:让^和$匹配每行的开头和结尾,而非整个文本的首尾
  • speakerA[::]:兼容示例中出现的中文冒号:和英文冒号:
  • .*?:非贪婪匹配,避免一次性匹配到文本末尾的重复块
  • (?=^speakerA[::] |\Z):正向预查,确保匹配到votC:的内容后,在下一个speakerA行或文本结尾处停止,不会包含下一个投票块的内容

测试与提取

使用findall或search方法提取内容:

matches = pattern.findall(your_text)
for full_match in matches:
    print(full_match)

原问题分析

你之前的正则r'(^speakerA:.*\n(.*\n)?^(voting))'存在两个核心问题:

  1. 未启用re.DOTALL,.无法匹配换行符,导致跨多行内容无法完整捕获
  2. 匹配逻辑仅局限于到(voting)行,未覆盖后续的list*和vot*行,不符合更新后的需求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 05:30:44