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

正则表达式优化需求:精准移除非1900-2199区间的数字+ml

解决正则匹配数字+ml时的排除逻辑问题

你之前的正则问题在于贪婪匹配会优先抓取最长的5位数字(比如测试例子里的80750),同时反向断言仅检查前面是否有完整的19/20/21开头的4位数字,无法识别前面已经存在需要保留的1900-2199数字段的情况。

解决方案

使用分支正则一次性处理两种场景,替换时保留需要的部分:

正则表达式:

(?i)(\b(?:19|20|21)\d{2})\d{1,5}ml$|(?!\b(?:19|20|21)\d{2}\b)\d{1,5}ml$

替换目标:$1

逻辑说明

  • 第一个分支(\b(?:19|20|21)\d{2})\d{1,5}ml$:匹配末尾的「1900-2199区间数字 + 1-5位数字 + ml」,捕获前面的1900-2199部分,替换时保留这部分,移除后面的数字+ml;
  • 第二个分支(?!\b(?:19|20|21)\d{2}\b)\d{1,5}ml$:匹配末尾的「1-5位数字 + ml」,且该数字不在1900-2199区间,替换时直接移除这部分;
  • 开头的(?i)标记忽略大小写,兼容ML、Ml等写法。

测试验证

  • 对于测试字符串Mary had a little lamb 1980750ml,第一个分支匹配1980750ml,捕获组1为1980,替换后得到Mary had a little lamb 1980,符合期望;
  • abc 750ml → 替换后为abc ;
  • abc 2000ml → 无匹配,保留原样;
  • abc 2200ml → 替换后为abc ;
  • abc 19801234ml → 替换后为abc 1980。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 02:50:19