如何用正则提取字符串中的独立数字20055001?现有正则含空格问题
解决正则提取数字带空格的问题
你的问题很常见——正则匹配时不小心把前面的空格也包含进去了,其实只要调整正则的写法,就能直接拿到纯数字20055001,给你几个实用的方案:
方案1:用零宽断言精准匹配数字(推荐)
把开头的\s换成正向回顾后发断言(?<=\s),这样正则只会检查数字前面有空格,但不会把空格纳入匹配结果。最终正则写成:
(?<=\s)\d+(?=\s)
这个正则的逻辑是:
(?<=\s):确保数字前面有一个空格(但不捕获这个空格)\d+:匹配1个或多个数字(这部分就是你要的结果)(?=\s):确保数字后面有一个空格(同样不捕获)
用这个正则匹配你的文本,直接就能得到纯数字20055001,不需要额外处理。
方案2:使用捕获组提取目标内容
如果你习惯用捕获组,也可以把数字部分用括号括起来,然后提取捕获组的内容:
\s(\d+)\s
使用这个正则时,不要直接取整个匹配结果,而是取第一个捕获组(不同语言里写法不同,比如Python里是match.group(1),Java里是matcher.group(1)),这样就能拿到纯数字。
为什么原来的正则会带空格?
你原来的正则\s\d+(?=\s++)里,开头的\s是实际匹配空格字符,会被包含在最终的匹配结果里;而后面的(?=\s++)是正向预查,只检查位置不捕获内容,所以结果就会带前面的空格啦。
举个Python的示例代码:
import re text = "17-2018-04-04 17:31:00,289 20055001 test@abc.com" # 方案1的用法 result1 = re.search(r'(?<=\s)\d+(?=\s)', text).group() print(result1) # 输出:20055001 # 方案2的用法 result2 = re.search(r'\s(\d+)\s', text).group(1) print(result2) # 输出:20055001
内容的提问来源于stack exchange,提问作者ranjeet
相关产品推荐
相关产品推荐

