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

正则表达式需求:删除非指定匹配文本,保留目标内容

问题描述
  • 原始字符串:
"This is some text.|Some more text.|Some other text.|Some different text."
  • 需求:删除所有不符合以下条件的文本:
    1. 保留行首的前n个字符;
    2. 保留每个|后的前n个字符。
  • 当n=10时:
    • 需要删除的文本:
    "me text.|text.| text.|rent text."
    
    • 最终期望结果:
    "This is so, Some more , Some other, Some diffe"
    
  • 当前问题:尝试正则^(.{20})|(\|)(.{20})仅能选中部分目标文本,无法实现删除非目标内容的需求。
解决方案

核心思路

放弃直接选中需保留内容的思路,转而匹配所有需要删除的冗余内容并替换为空,最后调整分隔符即可得到目标结果。

具体操作(以n=10为例)

1. 删除冗余内容

使用以下正则进行全局替换:

  • 查找:(?:^.{10}|\|.{10})\K.*?(?=\||$)
  • 替换值:空字符串

正则解释:

  • (?:^.{10}|\|.{10}):匹配行首前10个字符,或|后的前10个字符(非捕获组,不参与替换)
  • \K:重置匹配起点,此前的内容不会被替换
  • .*?(?=\||$):匹配到下一个|或字符串结尾的所有冗余内容(这部分就是要删除的)

替换后字符串变为:

"This is so|Some more |Some other |Some diffe"

2. 替换分隔符

将剩余的|全局替换为, ,得到最终结果:

"This is so, Some more , Some other, Some diffe"

通用化适配

若需适配任意n值,只需将正则中的10替换为目标数字即可:

(?:^.{n}|\|.{n})\K.*?(?=\||$)

兼容处理

如果使用的工具/语言不支持\K断言,可改用捕获组方式:

  • 查找:(^.{10}|\|.{10})(.*?)(?=\||$)
  • 替换为:$1

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 10:12:19