修改贪婪正则表达式:匹配第3个|后内容,无则取最后一个
解决方案
只需将原正则表达式替换为以下模式:
searching_root = r'(?:(?:[^|]*\|){3}|.*\|)(.*)$'
正则说明
(?:[^|]*\|){3}:匹配前三个|及其之前的所有内容(非捕获组),仅当字符串中|数量≥3时生效。.*\|:当字符串中|数量不足3时,匹配到最后一个|及其之前的所有内容(非捕获组)。(.*)$:捕获上述匹配之后的所有内容作为结果,对应原代码中的group(1)。
验证示例
针对你的测试数据:
- 含4个
|的字符串:捕获第三个|之后的完整内容 - 含2个
|的字符串:捕获最后一个|之后的内容 - 含多个
|的字符串:捕获第三个|之后的完整内容 - 含3个
|的字符串:捕获第三个|之后的内容
所有场景均符合需求,无需修改原函数逻辑,仅替换正则模式即可。
内容的提问来源于stack exchange,提问作者Someone_1313
相关产品推荐
相关产品推荐

