如何用Regex提取URL中最后一个/与.png之间的内容?
解决正则提取URL最后一个/与.png之间内容的问题
我来帮你搞定这个正则匹配的问题!你之前用的/(.+)\.png之所以贪婪过度,是因为.能匹配任意字符(除换行),+又是贪婪模式,会从第一个/开始一直匹配到最后一个.png的前一个字符,自然拿不到你想要的最后一段内容。
给你两种靠谱的解决方案,优先推荐第一种,因为更高效且精准:
方案1:使用非斜杠字符集匹配(推荐)
用[^/]来匹配不包含斜杠的字符,这样就能精准锁定最后一个/之后的内容,不会跨斜杠匹配。正则表达式如下:
r'/([^/]+)\.png$'
各部分解释:
/:匹配目标位置的斜杠(也就是最后一个/)([^/]+):捕获组,匹配1个或多个非斜杠字符,这就是我们要提取的核心内容\.png:匹配结尾的.png(.需要转义,否则会匹配任意字符)$:锚定字符串结尾,确保我们匹配的是URL最后的.png,避免误匹配中间可能存在的.png
完整代码示例:
import re s = u'https://cdn-a.sonyentertainmentnetwork.com/grc/images/ratings/hd/eirin/R-18.png' match_result = re.search(r'/([^/]+)\.png$', s) if match_result: target_content = match_result.group(1).replace('_', '-').upper() print(target_content) # 输出:R-18
方案2:非贪婪模式匹配
如果你更习惯用非贪婪语法,可以把原来的+改成+?,同时加上结尾锚定$,确保匹配到最后一个/后的内容:
r'/(.+?)\.png$'
注意点:
.+?是非贪婪模式,会尽可能少地匹配字符,直到遇到第一个.png,但加上$后,就会匹配到结尾的.png,从而锁定最后一段内容。不过这种方式会有轻微的回溯,效率不如方案1高。
用这个正则的代码示例:
import re s = u'https://cdn-a.sonyentertainmentnetwork.com/grc/images/ratings/hd/eirin/R-18.png' match_result = re.search(r'/(.+?)\.png$', s) if match_result: target_content = match_result.group(1).replace('_', '-').upper() print(target_content) # 输出:R-18
对比你原来的字符串拆分方法,正则的优势在于可以直接定位目标内容,不需要多次拆分和替换,代码更简洁直观。
内容的提问来源于stack exchange,提问作者David542
相关产品推荐
相关产品推荐

