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

如何用sed匹配C++风格正则并通过分组提取子串?

用sed匹配并拆分C++风格的邮编正则

当然可以搞定这个需求!针对你提到的邮编格式——XXddddd-dddd及变体,对应的C++正则是R"(\w{2}\s*\d{5}(−\d{4})?)")——我来给你演示如何用sed实现匹配和分组拆分:

核心思路

我们需要把邮编拆分成三个部分:前两个字母、中间五位数字、可选的末尾四位数字,用空格分隔输出。sed的反向引用(\1、\2这类)就对应C++正则里的分组捕获逻辑。

具体实现命令

echo AB00000-0000 | sed 's/\([[:alpha:]]\{2\}\)[[:space:]]*\([[:digit:]]\{5\}\)\(-\([[:digit:]]\{4\}\)\)\{0,1\}/\1 \2 \4/'

输出结果

AB 00000 0000

命令细节拆解

  • \([[:alpha:]]\{2\}\):捕获前两个字母字符,对应反向引用\1
  • [[:space:]]*:匹配任意数量的空白字符(包括0个,兼容带空格的变体比如AB 12345-6789)
  • \([[:digit:]]\{5\}\):捕获中间的五位数字,对应反向引用\2
  • \(-\([[:digit:]]\{4\}\)\)\{0,1\}:匹配可选的-xxxx后缀,其中内部的\([[:digit:]]\{4\}\)捕获四位数字,对应反向引用\4(外层括号是第三个分组,但我们只需要里面的数字部分)

如果输入是不带后缀的邮编(比如XY67890),命令会输出XY 67890 (末尾有个空格),如果需要去掉这个空格,可以稍微调整命令逻辑,但基础的匹配拆分需求已经完全满足啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 20:42:46