如何合并两个正则表达式,提取路径中最后斜杠后首个下划线前的字符串
问题原因
- 你使用的
|是正则的或匹配逻辑,仅会匹配两个模式中满足任意一个的结果,无法实现「先定位到最后一个/之后,再截取第一个_之前内容」的先后逻辑需求 - 你写的
(.*)^[^_]*_存在语法逻辑错误:^代表字符串起始位置,放在正则中间位置无法发挥你预期的截断作用 - 两个单独的正则仅各自完成了一半的定位逻辑,没有做嵌套捕获,自然无法得到目标结果
正确解法
单正则直接捕获
用如下正则即可一次性提取目标内容:.*\/([^_]*)_
逻辑解释:
.*\/是贪婪匹配,会一直匹配到字符串中最后一个/的位置,过滤掉前面所有路径内容([^_]*)是捕获组,匹配任意非_的字符,就是你要的abcde内容- 末尾的
_锚定到文件名中第一个下划线的位置,确保捕获组只拿到下划线前的内容
代码示例(Python)
import re target_str = "/users/test/test1/test2/abcde_482_fhsj_38575.txt" match_res = re.search(r'.*\/([^_]*)_', target_str) if match_res: print(match_res.group(1)) # 输出结果:abcde
其他可选思路
如果不想用复杂正则,也可以分两步处理:
- 先按
/分割字符串,取最后一段(即完整文件名) - 再按
_分割文件名,取第一段即可得到abcde
内容的提问来源于stack exchange,提问作者PPSATO
相关产品推荐
相关产品推荐

