如何使用Python正则表达式从字符串提取路径、文件名并排除特定内容
实现方案
1. 正则规则编写
针对你需要提取的两类内容,对应匹配规则如下:
- 匹配
/wp-content/开头的目录路径:r'\/wp-content\/uploads\/\d{4}\/\d{2}\/'
规则说明:匹配固定前缀/wp-content/uploads/加4位年份、2位月份、末尾带斜杠的路径结构。如果你的目录不是固定的年/月两级,可替换为r'\/wp-content\/uploads(?:\/[^\/]+)*\/'适配任意层级的uploads子目录。 - 匹配符合要求的图片文件名:
r'[\w\-.]+\.(?:jpg|jpeg|png|gif|webp)'
规则说明:匹配由字母、数字、横线、下划线、点组成,后缀为常见图片格式的文件名,可根据实际需求自行补充后缀类型。
如果需要直接从完整http/https链接中提取两类内容、自动排除域名部分,可使用带捕获组的合并正则:r'https?:\/\/[^\/]+(\/wp-content\/uploads\/\d{4}\/\d{2}\/)?([\w\-.]+\.(?:jpg|jpeg|png|gif|webp))?'
两个捕获组分别对应目录路径、图片文件名,无匹配对应内容时分组结果为None。
2. Python 调用示例
import re # 替换为你的目标字符串 test_str = """ https://example.com/wp-content/uploads/2021/09/VideoHive-Happy-Kids-Slideshow-Premiere-Pro-MOGRT-Free-Download-GetintoPC.com_-300x169.jpg /wp-content/uploads/2023/05/test-image.png 其他无关文本内容 """ # 提取所有目录路径 dir_pattern = re.compile(r'\/wp-content\/uploads\/\d{4}\/\d{2}\/') extracted_dirs = dir_pattern.findall(test_str) print("提取到的目录路径:", extracted_dirs) # 提取所有图片文件名 img_pattern = re.compile(r'[\w\-.]+\.(?:jpg|jpeg|png|gif|webp)') extracted_imgs = img_pattern.findall(test_str) print("提取到的图片文件名:", extracted_imgs) # 从完整URL中同时提取路径和文件名 combined_pattern = re.compile(r'https?:\/\/[^\/]+(\/wp-content\/uploads\/\d{4}\/\d{2}\/)?([\w\-.]+\.(?:jpg|jpeg|png|gif|webp))?') for match in combined_pattern.finditer(test_str): dir_path = match.group(1) img_name = match.group(2) if dir_path: print("匹配到的目录:", dir_path) if img_name: print("匹配到的文件名:", img_name)
运行输出示例
提取到的目录路径: ['/wp-content/uploads/2021/09/', '/wp-content/uploads/2023/05/'] 提取到的图片文件名: ['VideoHive-Happy-Kids-Slideshow-Premiere-Pro-MOGRT-Free-Download-GetintoPC.com_-300x169.jpg', 'test-image.png'] 匹配到的目录: /wp-content/uploads/2021/09/ 匹配到的文件名: VideoHive-Happy-Kids-Slideshow-Premiere-Pro-MOGRT-Free-Download-GetintoPC.com_-300x169.jpg
内容的提问来源于stack exchange,提问作者faisal rhm
相关产品推荐
相关产品推荐

