如何使用Regex匹配第一个pipe到第三个pipe之间的所有字符串
问题原因
你之前使用的.*\|(.*)\|无法得到正确结果,是因为正则默认的*量词为贪婪模式,.*\|会尽可能多匹配字符,直接匹配到字符串倒数第二个|的位置,最终捕获组只能拿到最后一段分隔内容,不符合需求。
解决方案
方案1:分组捕获(兼容性最好,所有正则引擎都支持)
使用正则:^[^|]*\|\s*([^|]+\|[^|]+)\s*\|
捕获组1的内容就是你需要的结果,正则里的\s*会自动去除匹配内容前后的空格,如果需要保留原始空格可删除这两个\s*。
方案2:零宽断言(直接返回匹配结果,无需提取捕获组,适合支持后向断言的引擎如Python re、Java、JS ES2018+)
使用正则:(?<=\|)[^|]+\|[^|]+(?=\|)
直接匹配到的结果就是目标内容。
效果验证
拿你给出的示例字符串测试:
原始字符串:DOWN | Origin - test-pd-2 | Pool - test-pd | TCP timeout occurred
两种方案匹配到的结果都是:Origin - test-pd-2 | Pool - test-pd,符合预期。
内容的提问来源于stack exchange,提问作者Anıl Baki Durmuş
相关产品推荐
相关产品推荐

