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

如何使用Sed正则表达式删除除序数词外的所有数字

解决思路:用正则删除非序数词数字,保留序数词相关数字

嘿,我懂你现在的需求——要把文本里所有数字删掉,但得留着那些跟序数词后缀(ST/TH/ND/RD,不管大小写)绑定的数字,比如126TH里的126要保留,102-1st里的102得删掉但1st里的1要留。你之前写的正则没生效,主要是几个细节没考虑到,我来帮你修正。

原正则的问题分析

你之前用的s/[0-9][0-9]*(?!(ST|[RN]D))//g有几个明显的缺陷:

  • 没处理TH后缀:导致像126TH这类序数词的数字会被误删
  • 大小写不兼容:输入里有1st这种小写后缀,正则只匹配大写的ST/RD/ND
  • 缺少单词边界:容易导致数字被部分匹配,或者误删其他场景的数字
  • 前瞻断言的范围太窄:没有覆盖所有需要保留的序数词后缀组合

修正后的正则表达式

我们需要匹配所有不跟在序数词后缀前面的完整数字,用带忽略大小写的负前瞻断言来实现,正则如下:

s/\b\d+(?!(?:st|th|nd|rd)\b)//gi

正则拆解

  • \b:匹配单词边界,确保我们处理的是完整的数字(避免部分匹配数字的情况)
  • \d+:匹配一个或多个数字
  • (?!(?:st|th|nd|rd)\b):负前瞻断言,确保当前数字后面没有紧跟序数词后缀(st/th/nd/rd),这里的\b是为了避免后缀后面还有其他字符的误判
  • gi:修饰符,g表示全局替换,i表示忽略大小写

测试验证

把你的测试输入代入:
输入:

12663 METRO CONDOMINIUM AS DESC IN INST# 200800031138 UNIT A 126TH AVENUE INDUSTRIAL PARK 13 AND 12-29-19 102-1st AVE CONDO

执行替换后得到的输出(符合你的期望):

METRO CONDOMINIUM AS DESC IN INST#  UNIT A 126TH AVENUE INDUSTRIAL PARK  AND -- -1st AVE CONDO

边缘场景处理说明

对于102-1st这种情况:

  • 102作为独立的数字,后面跟着的是-,不是序数词后缀,所以会被删除
  • 1后面直接跟着st后缀,符合保留条件,所以被保留,最终得到-1st,完全符合你的需求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 06:51:19