Python批量编辑字符串内URL:移除.jpg前的特定文本前缀
解决URL字符串中移除特定前缀的问题
你的代码存在几个明显问题,导致无法达到预期效果:
re.findall的正则表达式括号不闭合,并且仅匹配了URL的域名部分,没有提取完整的URL;re.sub的参数顺序完全错误,正确用法是re.sub(匹配模式, 替换内容, 目标字符串),你把目标字符串放到了替换内容的位置;- 没有考虑到带数字的前缀(比如
test-url-link-2-),仅替换test-url-link-无法覆盖所有场景。
直接全局替换(最简单的方案)
如果只需要修改整个字符串中的所有目标前缀,直接用全局正则替换即可:
import re domain_str = 'http://cdn4.abc//uploads/thumbnails/30/421/test-url-link-HuEB5k.jpg, http://cdn4.abc//uploads/thumbnails/24/579/test-url-link-2-D3MnkU.jpg, http://cdn4.abc//uploads/thumbnails/30/421/test-url-link-3-kJ65Vbe.jpg' # 匹配所有 test-url-link- 或 test-url-link-数字- 格式的前缀,替换为空 processed_str = re.sub(r'test-url-link(?:-\d+-)?', '', domain_str) print(processed_str)
正则说明:
test-url-link:匹配固定前缀部分;(?:-\d+-)?:非捕获组,\d+匹配1个或多个数字,?表示该组可选(即有没有数字后缀都能匹配);- 全局替换会自动处理字符串中所有符合规则的位置。
提取单个URL后处理(适合需要单独操作每个URL的场景)
如果你需要先提取每个URL再单独处理,可以用以下代码:
import re domain_str = 'http://cdn4.abc//uploads/thumbnails/30/421/test-url-link-HuEB5k.jpg, http://cdn4.abc//uploads/thumbnails/24/579/test-url-link-2-D3MnkU.jpg, http://cdn4.abc//uploads/thumbnails/30/421/test-url-link-3-kJ65Vbe.jpg' # 提取所有完整的URL(匹配以http/https开头,直到.jpg结束的内容) urls = re.findall(r'https?://.*?\.jpg', domain_str) # 对每个URL执行前缀替换 processed_urls = [re.sub(r'test-url-link(?:-\d+-)?', '', url) for url in urls] # 重新拼接成字符串 processed_str = ', '.join(processed_urls) print(processed_str)
两种方案的输出结果都是:
http://cdn4.abc//uploads/thumbnails/30/421/HuEB5k.jpg, http://cdn4.abc//uploads/thumbnails/24/579/D3MnkU.jpg, http://cdn4.abc//uploads/thumbnails/30/421/kJ65Vbe.jpg
内容的提问来源于stack exchange,提问作者user25301068
相关产品推荐
相关产品推荐

