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

如何用正则提取含900/901/903且后续至少两位数字的子串?

正确的正则实现方案

首先,先分析你现有正则的问题:

  • 存在语法错误:\(b 应该是 \b(单词边界),括号位置也不正确,{5,} 属于多余的重复限定——因为 900.. 已经是5个字符长度,重复限定会导致逻辑完全偏离需求。
  • 逻辑不符合需求:没有准确限定“900/901/903(以及你期望结果中包含的902)后续至少跟着两位数字”的规则。

根据你的需求(提取包含900、901、902、903且后续至少跟着两位数字的子串),以及期望/排除的匹配结果,正确的正则实现分为两种场景:

场景1:精确匹配5位目标序列

直接匹配以900/901/902/903开头、后面紧跟两位数字的5位数字串,确保核心序列后有至少两位数字:

Regex regex = new Regex(@"\b(900|901|902|903)\d{2}\b");

这个正则的匹配结果完全符合你的要求:

  • 匹配:90231(902+31)、90045(900+45)、90030(900+30)
  • 不匹配:9002(长度不足5位,900后仅1位)、09011(核心序列901后仅1位,且不以目标序列开头)

场景2:匹配包含目标序列的任意长度数字串

如果需要匹配更长的数字串(比如12900345这类包含900且后续有两位以上数字的串),可以用正向预查确保目标序列后有至少两位数字:

Regex regex = new Regex(@"\b\d*?(900|901|902|903)\d{2,}\b");

这个正则会匹配所有包含900/901/902/903、且该序列后至少有两位数字的连续数字串,同样不会匹配你的排除项。

关于你期望中的09089

这个串的核心序列是908,不在你指定的900/901/902/903范围内,所以上述正则不会匹配它。如果这是笔误(比如应为09039),可以调整正则允许前面带一位前缀:

Regex regex = new Regex(@"\b\d?(900|901|902|903)\d{2}\b");

这样09039会被匹配,但仍不会匹配09011(因为901后仅1位数字)。

内容的提问来源于stack exchange,提问作者Mec-Eng

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 04:47:23