如何编写正则表达式删除以!开头的行(保留最后一条)及空行
解决方案
你原有正则存在两个核心问题:
- 匹配规则写的是
#开头的行,和需求要求的!开头完全不符 - 硬编码了
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
相关产品推荐
相关产品推荐

