求匹配xxxx:xx格式字符串首个/第二个实例的正则表达式
问题描述
我有一系列如下格式的字符串:
08:00 0160:00 0000:00 0160:00 0000:00 0000:00 09:00 08:00 0120:00 0120:00
需要分别编写正则表达式,匹配其中格式为xxxx:xx的第一个和第二个字符串。尝试过多个正则表达式但均无效:
\s\b\d{4}:\d{2}\s (?<!\d)\d{4}:\d{2} \b\d{4}:\d{2} (?<=\s)\d{4}:\d{2}(?=\s) ^\d\s\b\d{4}:\d{2}\s
该正则需用于仅支持正则的前端OCR工具,无法通过代码获取匹配实例,要求直接匹配目标内容而非分组。
可行正则方案
匹配每行第一个xxxx:xx格式字符串
正则表达式:
(?<=^(?:(?!\d{4}:\d{2}).)*)\d{4}:\d{2}
说明:通过正向预查锁定行首到第一个xxxx:xx之前的范围,确保只命中每行首次出现的目标格式,兼容行首直接是目标格式的场景(如第二行)。
匹配每行第二个xxxx:xx格式字符串
正则表达式:
(?<=^(?:(?!\d{4}:\d{2}).)*\d{4}:\d{2}\s*)\d{4}:\d{2}
说明:在第一个匹配逻辑的基础上,追加匹配第一个xxxx:xx及其后续空白字符,确保只命中每行第二个出现的目标格式,兼容两个目标连续的场景(如第二行)。
原正则无效原因
- 多数正则强制要求目标前后为空格,漏掉了行首/行尾无空格的目标场景;
- 未做范围限定,会匹配所有符合格式的字符串,无法精准定位第N个目标;
- 部分正则对行首内容做了错误限定(如要求行首是单个数字),适配性极差。
内容的提问来源于stack exchange,提问作者Federicofkt
相关产品推荐
相关产品推荐

