我在解决某种情况时遇到了问题,我有这个正则表达式来匹配特定的数字序列:
(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
这将捕获其第一个子组中的匹配项。