正则表达式提取curl返回URL问题:如何获取不含引号的链接
解决从curl返回字符串中提取URL的问题
我明白你的问题啦——你用re.search('https://.*$', fileIO)匹配到的内容把后面的JSON尾巴也带上了,比如"https://file.io/Syv77d","expiry":"14 days"},这显然不是你想要的干净URL。问题出在你的正则表达式太“贪婪”了,而且没考虑URL的边界(双引号)。
给你两个靠谱的解决方案:
方案1:优化正则表达式
既然URL是被双引号包裹的,我们可以精准匹配双引号之间的URL内容,避免把后面的JSON字符带进来。试试这个正则:
import re # 假设fileIO是curl返回的字符串 match = re.search(r'"(https://file\.io/[^"]+)"', fileIO) if match: link = match.group(1) # 这里拿到的就是不带双引号的URL:https://file.io/Syv77d print(link)
正则说明:
":匹配URL开头的双引号https://file\.io/:固定匹配URL的前缀(注意.要转义成\.,因为正则里.是通配符)[^"]+:匹配除了双引号之外的所有字符,这样就会在遇到下一个双引号时停止,完美截断多余内容- 括号
():把我们想要的URL部分标记为捕获组,用group(1)就能提取出来
方案2:用JSON解析更稳妥(推荐)
既然curl返回的内容看起来是JSON格式(有"expiry":"14 days"这种键值对),那直接用Python的json模块解析才是最靠谱的方式,比正则不容易出错:
import json # 把字符串转成Python字典 response_data = json.loads(fileIO) # 假设URL对应的键是"link",根据实际返回的JSON结构调整键名 link = response_data["link"] print(link)
这种方法不用依赖字符串的格式细节,只要JSON结构正确,就能直接拿到想要的URL,后续如果返回内容有小变化(比如键的顺序变了),也不会影响提取结果。
内容的提问来源于stack exchange,提问作者Dee
相关产品推荐
相关产品推荐

