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

如何用Python正则表达式移除特定字符间的文本(支持多次匹配)

问题描述

需要移除字符“-”与字符串“\n”之间的文本(包含这两个字符本身),具体示例如下:

  • 示例1:输入字符串 hi.-hello\n good morning,期望输出 hi. good morning
  • 示例2:输入字符串 hi.-hello\n good morning -axq\n,期望输出 hi. good morning axq

参考以下正则示例后仍无法写出对应语法,同时希望学习此类需求的通用正则自定义语法:

参考示例1

import re
str = "hi.)hello| good morning"
re.sub(r"(?<=\)).*?(?=\|)", "", str)
>>> 'hi.)| good morning'

参考示例2

>>> import re 
>>> x = "This is a sentence. (once a day) [twice a day]"
>>> re.sub("([\(\[]).*?([\)\]])", "\g<1>\g<2>", x)
'This is a sentence. () []'

参考示例3

>>> import re 
>>> x = "This is a sentence. (once a day) [twice a day]"
>>> re.sub("[\(\[]).*?([\)\]]", "", x)
'This is a sentence.  '

解决方案与正则思路解析

针对需求的直接实现

要移除-到\n之间的所有内容(包含这两个字符本身),直接用下面的正则就能搞定:

import re

# 测试示例1
input1 = "hi.-hello\n good morning"
output1 = re.sub(r"-.*?\n", "", input1)
print(output1)  # 输出: hi. good morning

# 测试示例2
input2 = "hi.-hello\n good morning -axq\n"
output2 = re.sub(r"-.*?\n", "", input2)
print(output2)  # 输出: hi. good morning axq

正则逻辑拆解

  • -:直接匹配目标起始的-(它不是正则特殊字符,无需转义)
  • .*?:非贪婪模式匹配任意字符(.匹配除换行外的所有字符,*表示可重复0次或多次,?开启非贪婪,避免从第一个-直接匹配到最后一个\n)
  • \n:匹配结束的换行符,正则中用转义字符表示真实的换行

这类“边界间内容处理”的通用正则思路

你的需求本质是匹配两个标记字符之间的内容并进行删除/保留处理,这类需求分两种核心场景,结合你提供的参考示例逐一拆解:

场景1:保留边界字符,仅删除中间内容(对应参考示例1、2)

  • 参考示例1采用正向预查:
    (?<=\))是正向肯定预查,仅匹配)之后的位置但不捕获)本身;(?=\|)是正向肯定预查,仅匹配|之前的位置但不捕获|本身。中间的.*?匹配需要删除的内容,替换为空后自然保留了边界的)和|。
  • 参考示例2采用捕获分组:
    ([\(\[])将(或[存储为分组1,([\)\]])将)或]存储为分组2;替换时通过\g<1>\g<2>调用这两个分组的内容,相当于清空中间内容,仅保留边界符号。

场景2:边界与中间内容一并删除(对应你的需求、参考示例3)

你的需求和参考示例3均属于此类,直接将边界字符与中间内容作为整体匹配,替换为空即可:

  • 参考示例3的正则(原示例存在小括号笔误,正确逻辑是匹配(/[ + 中间内容 + )/]),替换为空后即可删除整个括号及内部内容,与你的需求逻辑完全一致——直接将需要删除的完整区间(边界+中间内容)写入正则,替换为空即可完成操作。

必记关键细节

  1. 贪婪与非贪婪模式:若文本中存在多个结束边界,务必使用.*?非贪婪模式,否则会从第一个起始边界直接匹配到最后一个结束边界,导致过度删除。
  2. 特殊字符转义:若边界字符为正则特殊字符(如(, ), |, \等),必须添加\进行转义,例如匹配(需写为\(。
  3. 分组与预查的选择:若需保留边界字符,可使用捕获分组或正向预查;若需连同边界一并删除,直接将边界包含在匹配规则中即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 20:10:33