如何用Python re.sub正则表达式批量插入换行至指定文本前
批量处理含PROB TEMPO和TEMPO文本的格式问题
需求说明
我有一段包含大量PROB TEMPO和TEMPO的文本,需要完成两个格式调整:
- 针对
PROB TEMPO,在PROB与TEMPO之间插入换行和缩进标记(</br> ) - 针对前面未出现
PROB的独立TEMPO,在TEMPO前插入同样的换行和缩进标记
之前只能逐个匹配具体前缀(比如BKN009 TEMPO),尝试用正则批量处理但失败,比如以下代码未生效:
new_text = re.sub("BKN0\d\d", "BKN0\d\d </br> TEMPO", text)
解决方案
可以通过两次正则替换实现批量处理,无需逐个匹配具体前缀:
1. 处理PROB TEMPO组合
直接匹配该固定组合,替换为带格式的版本:
import re text = "PROB TEMPO BKN001 TEMPO BKN009 PROB TEMPO BKN008 TEMPO BKN012..." # 替换PROB TEMPO为带换行缩进的格式 new_text = re.sub(r"PROB TEMPO", r"PROB </br> TEMPO", text)
2. 处理独立的TEMPO
使用负向前瞻断言匹配前面不是PROB 的TEMPO,然后插入格式标记:
# 匹配前面无PROB的TEMPO,添加格式 new_text = re.sub(r"(?<!PROB )TEMPO", r"</br> TEMPO", new_text)
最终结果
处理后的文本会变成:
PROB </br> TEMPO BKN001 </br> TEMPO BKN009 PROB </br> TEMPO BKN008 </br> TEMPO BKN012...
正则说明
(?<!PROB )是负向前瞻断言,确保匹配TEMPO时,其前面不是PROB(保留空格避免误匹配类似PROBTEMPO的异常情况)- 先处理
PROB TEMPO组合,可避免第二步重复匹配已处理过的TEMPO,保证逻辑正确性
内容的提问来源于stack exchange,提问作者nico
相关产品推荐
相关产品推荐

