正则表达式如何排除含字母分组、仅匹配全为数字的内容行
解决方案
你可以通过「先排除无效行,再匹配目标内容」的逻辑实现需求,根据你使用的正则引擎支持程度,可选两种方案:
方案1:支持(*SKIP)(*FAIL)语法的引擎(PCRE、Python PyPi regex库、Go regexp等)
直接使用以下正则:
^\| *[a-zA-Z].*(*SKIP)(*FAIL)|\d+|(?:\d{2}:\d{2}\.\d)|(?:\d+\.\d+)
逻辑说明:
- 前半段
^\| *[a-zA-Z].*(*SKIP)(*FAIL)会匹配所有行首为|、第一个字段含字母的整行内容,标记为直接跳过不参与匹配,相当于一次性过滤掉所有event开头的无效行 - 后半段的分支对应你要匹配的纯数字、时间格式、小数格式内容,只会在剩余的有效行中命中,最终得到你需要的
30 00:45.3 00:42.4 2.4869 5.6578匹配结果
方案2:兼容性方案(所有正则引擎通用)
先定位有效行再提取分组内容,正则如下:
^\|\s*(\d+)\s*\|\s*(\d{2}:\d{2}\.\d)\s*\|\s*(\d{2}:\d{2}\.\d)\s*\|\s*(\d+\.\d+)\s*\|\s*(\d+\.\d+)\s*$
使用时直接提取第1到第5个捕获组的内容,拼接即可得到目标结果。
内容的提问来源于stack exchange,提问作者Zerocal
相关产品推荐
相关产品推荐

