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

如何用正则表达式跳过中间冗余区段,精准提取目标内容?

提取指定#分隔段的内容

原始输入

@Dacor 125#Apples were stored in Section 1.#Delivered on 02/03/2023. All ok.#

期望输出

Apples were stored in Section 1

原命令问题分析

你之前用的awk命令里,(.*)#是贪婪匹配模式,会从第一个#后一直匹配到最后一个#前的所有内容,所以会把中间的#Delivered on 02/03/2023. All ok.也包含进去,导致输出不符合预期。

解决方案

方案1:awk非贪婪匹配(gawk支持)

awk 'match($0, /@[^#]+#(.*?)#/, arr) {sub(/\.$/, "", arr[2]); print arr[2]}'
  • .*?是非贪婪匹配,只会匹配到第一个后续的#为止
  • sub(/\.$/, "", arr[2])用于去掉内容末尾的句号

方案2:awk用[^#]+限定匹配范围

awk 'match($0, /@[^#]+#([^#]+)#/, arr) {sub(/\.$/, "", arr[1]); print arr[1]}'
  • [^#]+仅匹配不含#的字符,精准捕获第一个#和第二个#之间的内容
  • 同样用sub去掉末尾句号

方案3:用gsub批量替换(符合你提到的gsub处理需求)

awk '{gsub(/^@[^#]+#|#.*$|\.$/, ""); print}'
  • ^@[^#]+#:删除开头从@到第一个#的所有内容
  • #.*$:删除第二个#到行尾的所有内容
  • \.$:删除内容末尾的句号

内容的提问来源于stack exchange,提问作者Ginko-Mitten

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 10:18:17