Regex提取字符串首个空格前纯数字内容的正确写法咨询
正则提取方案
原有正则的问题
[\s0-9]+会匹配所有空格、数字组合,会误匹配后续日期中的数字,也没有处理开头的#标记\s[0-9]+匹配的是空格后的数字串,和目标内容的位置完全相反,无法匹配到开头的目标数字
正确正则表达式
方案1:捕获组写法(兼容所有正则环境)
正则规则:^#(\d+)\s
规则说明:
^限定匹配字符串起始位置#匹配开头的井号标记(\d+)为捕获组,匹配连续数字,即你需要提取的内容,直接取第1个捕获组即可得到结果\s匹配目标数字后的首个空格,避免匹配到后续日期中的数字
方案2:零宽断言写法(支持零宽断言的环境可直接拿到结果,无需取捕获组)
正则规则:(?<=^#)\d+(?=\s)
规则说明:
(?<=^#)正向零宽后行断言,限定匹配内容的前缀为字符串开头加井号\d+匹配目标数字串(?=\s)正向零宽先行断言,限定匹配内容的后缀为空格,避免误匹配
使用示例(以Python为例)
import re raw_text = "#1314515 22-09-2021" # 捕获组方案 result1 = re.search(r"^#(\d+)\s", raw_text).group(1) # 零宽断言方案 result2 = re.search(r"(?<=^#)\d+(?=\s)", raw_text).group() print(result1) # 输出 1314515 print(result2) # 输出 1314515
内容的提问来源于stack exchange,提问作者RBR
相关产品推荐
相关产品推荐

