正则表达式新手求助:提取字符串前四组可变位数数字
Hey there! 作为正则新手能花两天时间钻研问题,这份韧劲必须点个赞👍 针对你需要从特定格式字符串中提取前四组数字的需求,我给你整理了四个精准的正则表达式,完全适配你的数字组_数字组_数字组_数字组_S2......模板:
每组正则都针对目标数字组的位置设计,逻辑清晰,新手也能快速理解:
提取第一组数字(示例中的38)
正则:^(\d+)(?=_)
解释:^锚定字符串开头,(\d+)捕获一或多个连续数字(不管位数多少),(?=_)是正向预查,确保后面紧跟着下划线但不会把下划线包含到结果里。提取第二组数字(示例中的285)
正则:^\d+_(\d+)(?=_)
解释:^\d+_跳过开头的第一组数字和分隔下划线,(\d+)捕获第二组数字,同样用(?=_)确保后面是下划线,精准定位。提取第三组数字(示例中的4461)
正则:^\d+_\d+_(\d+)(?=_)
解释:跳过前两组数字和对应的两个下划线,(\d+)直接捕获第三组数字,(?=_)验证后续的下划线分隔符。提取第四组数字(示例中的186)
正则:^\d+_\d+_\d+_(\d+)(?=_S2)
解释:跳过前三组数字和三个下划线,(\d+)捕获第四组数字,(?=_S2)专门匹配模板里的_S2后缀,避免误匹配后续内容。
验证示例
用你提供的测试字符串验证:
测试字符串:
38_285_4461_186_S2A_MSIL2A_20180119T101331_N0206_R022_T32TQQ_20180119T135441
四个正则分别匹配后,会依次得到:38、285、4461、186
小提示(新手友好)
如果用Python、JavaScript这类支持捕获组的工具,直接取正则的第一个捕获组内容即可。比如Python代码示例:
import re test_str = "38_285_4461_186_S2A_MSIL2A_20180119T101331_N0206_R022_T32TQQ_20180119T135441" # 提取第一组 first_group = re.search(r'^(\d+)(?=_)', test_str).group(1) # 提取第二组 second_group = re.search(r'^\d+_(\d+)(?=_)', test_str).group(1) # 提取第三组 third_group = re.search(r'^\d+_\d+_(\d+)(?=_)', test_str).group(1) # 提取第四组 fourth_group = re.search(r'^\d+_\d+_\d+_(\d+)(?=_S2)', test_str).group(1) print(first_group, second_group, third_group, fourth_group) # 输出:38 285 4461 186
内容的提问来源于stack exchange,提问作者devJava

