Python 使用正则表达式从URL提取文件名--需要排除一些字符

Python 使用正则表达式从URL提取文件名--需要排除一些字符,python,regex,python-3.x,Python,Regex,Python 3.x,我有一个如下格式的资源: {"url": "http://res1.icourses.cn/share/process17//mp4/2017/3/17/6332c641-28b5-43a0-894c-972bd804f4e1_SD.mp4", "name": "1-课程导学"}, {"url": "http://res2.icourses.cn/share/process17//mp4/2017/3/17/a21902b6-8680-4bdf-8f47-4f99d1354475_SD.mp4

我有一个如下格式的资源:

{"url": "http://res1.icourses.cn/share/process17//mp4/2017/3/17/6332c641-28b5-43a0-894c-972bd804f4e1_SD.mp4", "name": "1-课程导学"}, 
{"url": "http://res2.icourses.cn/share/process17//mp4/2017/3/17/a21902b6-8680-4bdf-8f47-4f99d1354475_SD.mp4", "name": "2-计算机网络的定义与分类"}
我想从url中提取文件名6332c641-28b5-43a0-894c-972bd804f4e1_SD.mp4和a21902b6-8680-4bdf-8f47-4f99d1354475_SD.mp4


如何编写正则表达式以匹配此位置的字符串

根据您提供的字符串,您可以迭代字典,获取url的值并使用以下正则表达式

[^\/]*$

说明:

() - defines capturing group
[^\/] - Match a single character not present after the ^
\/ - matches the character / literally (case sensitive)
* - Quantifier — Matches between zero and unlimited times, as many times as possible, giving back as needed (greedy)
$ - asserts position at the end of the string, or before the line terminator right at the end of the string (if any)
例如:

for record in records:
    print(re.search("([^\/]*)$", record['url']).group(1))
在本例中,我们利用了文件名出现在字符串末尾这一事实。使用$anchor使唯一有效的匹配项终止字符串

如果要对转换为字符串的词典执行此操作,可以通过更改结束条件来实现。像这样[^\/]*?\,。现在,终止匹配注释\以退出。看

最后,如果我们没有那么幸运,捕获组位于字符串的末尾,这意味着我们不能使用$,那么我们可以使用后面的负面观察。您可以阅读这些内容。

您可以使用re.findall:

您可以使用短正则表达式[^/]*$

代码:

输出:

['6332c641-28b5-43a0-894c-972bd804f4e1_SD.mp4', 'a21902b6-8680-4bdf-8f47-4f99d1354475_SD.mp4']
['6332c641-28b5-43a0-894c-972bd804f4e1_SD.mp4','a21902b6-8680-4bdf-8f47-4f99d1354475_SD.mp4']


检查正则表达式-

您的建议是什么?@REA您的解决方案是什么。如果我能帮忙或者clarify@TigerTV.ru@matisetorm我使用了\w.\.mp4,输出为url:http://res1.icourses.cn/share/process17//mp4/2017/3/17/6332c641-28b5-43a0-894c-972bd804f4e1_SD.mp4. 因为我不知道如何排除/并将最后一个/作为边界。我使用[^\/]*$,输出为a21902b6-8680-4bdf-8f47-4f99d1354475_SD.mp4,名称:2-计算机网络的定义与分类} 请使用Python进行验证,然后使用第二个。您不清楚是针对字符串使用它,还是针对字符串使用字典。看,我已经解决了这个问题。@REA第一个问题是假设你在字典上迭代。第二个是假设您将字典转换为字符串。这两种方法都在适当的情况下工作,并在regex101.com上进行了验证,这是初始链接指向您的地方。干杯,谢谢,我已经成功验证了。
['6332c641-28b5-43a0-894c-972bd804f4e1_SD.mp4', 'a21902b6-8680-4bdf-8f47-4f99d1354475_SD.mp4']
import re
s = [{"url": "http://res1.icourses.cn/share/process17//mp4/2017/3/17/6332c641-28b5-43a0-894c-972bd804f4e1_SD.mp4", "name": "1-课程导学"}, {"url": "http://res2.icourses.cn/share/process17//mp4/2017/3/17/a21902b6-8680-4bdf-8f47-4f99d1354475_SD.mp4", "name": "2-计算机网络的定义与分类"}]
filenames = [re.findall('[^/]*$', i['url'])[0] for i in s]
print(filenames)`