Python正则表达式问题:如何提取路径的最后一段有效内容
Python正则表达式处理路径前缀,提取最后一段内容
现有路径前缀列表,需要提取每个路径的最后一段(去掉前面所有层级和末尾的斜杠),当前代码的正则表达式逻辑混乱,无法得到预期结果。
现有代码
import re CommonPrefixes = [{'Prefix': 'BA/BMF/ABCDEJF/'}, {'Prefix': 'AG/CRBA_CORE/ABCDEJF/'}, {'Prefix': 'DC/KAT/pages-modified/'}] res = [re.sub("(^\w+/)|(^\w+\/|/)|(/$)",'',x["Prefix"]) for x in CommonPrefixes] print(res)
- 实际输出:
['BMFABCDEJF', 'CRBA_COREABCDEJF', 'KATpages-modified'] - 期望输出:
['ABCDEJF', 'ABCDEJF', 'pages-modified']
解决方案
方案1:直接匹配最后一段内容(更直观)
不用替换操作,直接定位最后一个斜杠之后、末尾斜杠之前的内容:
import re CommonPrefixes = [{'Prefix': 'BA/BMF/ABCDEJF/'}, {'Prefix': 'AG/CRBA_CORE/ABCDEJF/'}, {'Prefix': 'DC/KAT/pages-modified/'}] res = [re.search(r'[^/]+(?=/$)', x["Prefix"]).group() for x in CommonPrefixes] print(res)
正则说明:
[^/]+:匹配任意非斜杠的字符序列,也就是我们要的最后一段内容(?=/$):正向预查,确保匹配的内容后面紧跟着末尾的斜杠,避免误匹配中间路径
方案2:调整替换规则(保留re.sub写法)
把开头到最后一个斜杠的所有内容,以及末尾的斜杠,全部替换为空:
import re CommonPrefixes = [{'Prefix': 'BA/BMF/ABCDEJF/'}, {'Prefix': 'AG/CRBA_CORE/ABCDEJF/'}, {'Prefix': 'DC/KAT/pages-modified/'}] res = [re.sub(r'^.+/|/$', '', x["Prefix"]) for x in CommonPrefixes] print(res)
正则说明:
^.+\/:匹配从字符串开头到最后一个斜杠的所有内容(.+贪婪匹配任意字符,确保拿到最右侧的斜杠)|/$:匹配末尾的斜杠- 两部分都替换为空后,剩下的就是目标内容
两种方案运行后都会输出预期结果:['ABCDEJF', 'ABCDEJF', 'pages-modified']
内容的提问来源于stack exchange,提问作者user14932992
相关产品推荐
相关产品推荐

