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
相关产品推荐
相关产品推荐

