如何编写正则表达式匹配字符串中独立完整的数字序列
正则提取前后无相邻数字的独立完整数字方案
问题根源
之前使用的[0-9]+规则未做数字边界限制,正则会在连续数字序列的任意位置截取符合长度的数字片段,因此会从10中拆分出1、从100中拆分出1和10,最终出现1被提取3次、10被提取2次的错误结果。
正确匹配规则
通过负向环视断言限定数字的前后相邻字符规则即可解决,完整正则如下:
(?<!\d)\d+(?!\d)
规则拆解
(?<!\d):负向后行断言,要求匹配到的数字片段起始位置前,不能存在其他数字,避免从连续数字串的中间位置开始截取\d+:匹配1位及以上的连续数字,和原有核心匹配逻辑一致(?!\d):负向前瞻断言,要求匹配到的数字片段结束位置后,不能存在其他数字,保证匹配到的是一整段连续数字,不会出现截断
匹配效果
针对测试字符串"1 is not 10 and also not 100!",该规则只会精准匹配到三个独立数字:
- 字符串开头的
1 - 句子中间的
10 - 感叹号前的
100
该规则通用性较强,无论数字出现在字符串开头、中间还是结尾,相邻字符是空格、标点还是字母,只要前后没有紧邻其他数字,都会被完整提取,不会出现漏匹配、重复匹配、截断的问题。
内容的提问来源于stack exchange,提问作者Scratch
相关产品推荐
相关产品推荐

