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

Python正则表达式提取符合特定规则的单行与多行文本问题

问题描述

输入数据:

I am not Myc wooo0
Myc wooo1
Myc wooo3
+ rt ...4
do not consider me5
Myc wooo6
+ rt ....7
+ rt ....8
do not consider me9
+ rt ....10
+ rt ....11
Myc wooo12

需要提取两类行:

  • 所有以Myc开头的行;
  • 紧跟在Myc开头行之后、以+ 开头的行。

预期输出:

Myc wooo1
Myc wooo3
+ rt ...4
Myc wooo6
+ rt ....7
Myc wooo12

用户尝试的正则表达式未得到正确结果,希望用正则高效处理大体积数据:

pattern_myc = '\n(Myc[^\n]*\n\+[^\n]*\n|Myc[^\n]*\n)'
result_lines = re.findall(pattern_myc, input_text)

正则修正方案

原正则的问题在于依赖换行符作为边界,会漏掉开头的Myc行,且捕获组结构会导致结果带多余换行,无法精准匹配紧跟Myc的那一行+行。可以用以下代码解决:

import re

input_text = """I am not Myc wooo0
Myc wooo1
Myc wooo3
+ rt ...4
do not consider me5
Myc wooo6
+ rt ....7
+ rt ....8
do not consider me9
+ rt ....10
+ rt ....11
Myc wooo12"""

# 匹配Myc单行,或Myc行+紧跟的+行
pattern = r'(Myc[^\n]*(?:\n\+[^\n]*)?)'
matches = re.findall(pattern, input_text)

# 清理空内容并拼接结果
result = '\n'.join([line.strip() for line in matches if line.strip()])
print(result)

正则说明

  • Myc[^\n]*:匹配完整的Myc开头行;
  • (?:\n\+[^\n]*)?:非捕获组,可选匹配紧跟Myc行的+开头行,?表示这部分是可选的,避免误抓后续无关的+行;
  • 最后通过strip()清理多余换行,确保输出格式整洁。

运行后输出与预期完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 05:02:36