Python如何使用正则从文本中提取指定位置的cutt.ly短链接
提取cutt.ly短链接实现方案
问题背景
需求为从给定的JSON格式文本中提取目标cutt.ly短链接https://cutt.ly/XJDV1G8。此前使用正则匹配未成功,初始编写的代码仅能匹配双引号包裹的零散内容,无法定位到目标区域,原错误测试代码如下:
import re text = '{"url":{"status":7,"fullLink":"https:\/\/twitter.com\/furkan_alkaya_","date":"2022-06-08","shortLink":"https:\/\/cutt.ly\/XJDV1G8","title":"Furkan Alkaya (@furkan_alkaya_) | Twitter"}}' x = re.search(r"\b""\w+",text) print(x.group())
原正则存在明显逻辑缺陷:
- 拼接双引号的写法仅能匹配单词边界后紧跟双引号、再接连续字母/数字/下划线的内容,完全无法覆盖URL包含的冒号、斜杠、点号等特殊字符
- 未适配原文本中URL斜杠前的转义反斜杠
- 没有定位目标字段的逻辑,无法精准命中短链接位置
可行实现方案
方案1:JSON解析(稳定性最高)
待处理文本本身是标准JSON结构,直接解析字段比正则匹配容错性更强,不会因为字段顺序、内容变动匹配失败:
import json text = '{"url":{"status":7,"fullLink":"https:\/\/twitter.com\/furkan_alkaya_","date":"2022-06-08","shortLink":"https:\/\/cutt.ly\/XJDV1G8","title":"Furkan Alkaya (@furkan_alkaya_) | Twitter"}}' # 加载JSON后直接取shortLink字段 data = json.loads(text) target_link = data["url"]["shortLink"] print(target_link)
运行输出:https://cutt.ly/XJDV1G8
方案2:定向正则匹配(适合必须使用正则的场景)
不需要数双引号序号,直接匹配cutt.ly域名的链接即可,同时适配文本中的转义反斜杠:
import re text = '{"url":{"status":7,"fullLink":"https:\/\/twitter.com\/furkan_alkaya_","date":"2022-06-08","shortLink":"https:\/\/cutt.ly\/XJDV1G8","title":"Furkan Alkaya (@furkan_alkaya_) | Twitter"}}' res = re.search(r'https?:\\?/\\?/cutt\.ly\\?/[A-Za-z0-9]+', text) if res: # 移除转义用的反斜杠得到真实链接 target_link = res.group().replace("\\", "") print(target_link)
运行输出:https://cutt.ly/XJDV1G8
方案3:按双引号序号匹配(仅适配当前固定文本)
如果一定要按照「提取第8处双引号包裹内容」的逻辑实现,可以先提取所有双引号包裹的内容,再按下标取值(注意Python列表下标从0开始,第8处对应下标7):
import re text = '{"url":{"status":7,"fullLink":"https:\/\/twitter.com\/furkan_alkaya_","date":"2022-06-08","shortLink":"https:\/\/cutt.ly\/XJDV1G8","title":"Furkan Alkaya (@furkan_alkaya_) | Twitter"}}' all_quoted_seg = re.findall(r'"([^"]+)"', text) if len(all_quoted_seg) >= 8: target_link = all_quoted_seg[7].replace("\\", "") print(target_link)
注意:该方案容错性极差,只要原文本的字段数量、顺序发生变动就会提取错误,非特殊场景不推荐使用。
内容的提问来源于stack exchange,提问作者Furkan Alkaya
相关产品推荐
相关产品推荐

