如果包含在 23 位数字字符串中,则正则表达式忽略匹配

如果包含在 23 位数字字符串中,则正则表达式忽略匹配

我在解决某种情况时遇到了问题,我有这个正则表达式来匹配特定的数字序列:

(102030)\d{10}

使用它作为测试数据,我得到以下匹配:

75277887243040354513001
55345377243014107206375
810203087654135168       <- Match
1102030698798798477      <- Match
71020307248040361799581  <- Match

我想做的是忽略字符串中有 23 位数字的情况,仅使用正则表达式可以做到这一点吗?我尝试过使用负向预测,但未能成功。

答案1

为了向前看,你需要先做一些事情 - 所以让我们开始

\d

然后对接下来的 22 位数字取负数:

(?!\d{22})

我们过滤掉所有包含 23 位数字的行。然后可能会跟随您的原始字符串

(102030)\d{10}

因此完整的正则表达式将是

\d(?!\d{22})(102030)\d{10}

查看结果regex101.com

在此处输入图片描述

答案2

\b(?!\d{23}\b)\d*((102030)\d{10})\d*\b

这将捕获其第一个子组中的匹配项。

相关内容