如何用同一个正则表达式匹配两行不同格式的Last dying gasp time内容
匹配方案
你可以使用如下正则实现两行内容的同时匹配,支持严格整行校验:
^Last dying gasp time\s+:\s+(?:-|\d{4}-\d{2}-\d{2}\s+\d{2}:\d{2}:\d{2})\s*$
如果不需要严格匹配整行,也可以用更宽松的通用版本:
Last dying gasp time\s+:\s+(?:-|[\d-]+\s+[\d:]+)
如果需要提取冒号后的内容,把正则中的非捕获组(?:)改成普通分组()即可。
原正则失效原因
- 第一个正则
Last dying gasp time\s+:\s+[\d-]+\s+[\d:]+强制要求必须存在时间部分,无法匹配只有-的行 - 第二个正则
Last dying gasp time\s+:\s+[\d-]仅匹配单个数字或横杠,无法覆盖完整的日期、时间内容,两行都不能完整匹配 - 第三个正则
Last dying gasp time\s+:\s+[\d-]+(\s+[\d:]+)?逻辑上接近可用,但写法不够严谨,如果你开启了严格行匹配、或是目标行的-后存在多余空白,就可能出现匹配失败的情况,同时还会匹配到123-这类不符合格式的无效内容。
内容的提问来源于stack exchange,提问作者user5482212
相关产品推荐
相关产品推荐

