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

如何用Python re.search匹配行首为WORD的行及其前序所有非空行

正则匹配实现方案

直接使用如下写法即可满足需求:

import re

text = """foo bar
foo bar

bar foo

bla
blu
WORD foo bar

foo bar
"""
result = re.search(r'(?<!\S)(?:[^\n]+\n)*?^WORD[^\n]*', text, flags=re.M)
print(result.group())

运行后输出和预期完全一致:

bla
blu
WORD foo bar

正则逻辑说明

各部分匹配规则拆解:

  • (?<!\S):零宽负向后行断言,确保当前匹配位置的前一个字符不是非空白字符,也就是匹配位置要么是整个文本的开头,要么是空行之后,保证抓到的是连续非空行块的起始位置,不会从某一行的中间截断
  • (?:[^\n]+\n)*?:非贪婪匹配0到多个「非空整行+换行符」,只会捕获WORD行之前、最近一个空行之后的所有连续非空行,不会跨空行匹配前面无关的内容
  • ^WORD[^\n]*:在多行模式下^匹配行首,精准定位到以WORD开头的目标行,匹配整行内容

原写法错误原因

之前的写法r'\n\n.*(?!\n\n)WORD.*?\n'存在两个核心问题:

  • 开启re.DOTALL后.会匹配换行符,.*会直接跨过任意数量的空行,直到碰到离WORD最近的位置,完全无法实现「连续非空行」的边界判断
  • (?!\n\n)负向预查放在.*之后没有实际约束效果,因为.*贪婪匹配时已经把所有字符吃到WORD前了,预查条件永远成立,起不到拦截空行的作用

给出的正则同时兼容文本开头就是连续非空行+WORD行的场景(即WORD块前面没有空行,直接在文本最开头),不需要额外调整。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 23:39:14