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

如何编写正则表达式删除以!开头的行(保留最后一条)及空行

解决方案

你原有正则存在两个核心问题:

  • 匹配规则写的是#开头的行,和需求要求的!开头完全不符
  • 硬编码了a b c d的匹配逻辑,只能适配当前示例,换其他输入就会失效

你可以通过两次正则替换实现通用需求,代码可直接复用:

处理逻辑

1. 保留最后一行!开头的行的!后内容

使用正则模式 r'(?s)^.*!\s*(?=[^!]*$)',逻辑说明:

  • (?s) 开启单行模式,让.可以匹配换行符
  • 利用贪婪匹配特性,自动匹配从文本开头到**最后一个!**的所有内容
  • \s* 匹配最后一个!后紧跟的所有空白字符
  • (?=[^!]*$) 正向预查确保当前匹配的是全文最后一个!
    将匹配到的内容替换为空即可。

2. 删除所有空行

使用正则模式 r'(?m)^\s*$\n?',逻辑说明:

  • (?m) 开启多行模式,让^和$匹配每一行的首尾
  • 匹配全为空白字符的空行以及后续的换行符,替换为空即可。

完整可运行代码

import re

textstring = """! row 1
!that is row number 2
!  - another row
! a b c d
0 1 2 3
4 5 6 7
8 9 10 11
"""
# 处理!开头的行
result = re.sub(r'(?s)^.*!\s*(?=[^!]*$)', '', textstring)
# 删除空行
result = re.sub(r'(?m)^\s*$\n?', '', result)
print(result)

运行后输出和你要求的期望结果完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 13:45:07