我正在使用聊天机器人。我希望它发布匹配的数据从一个API时,只要链接到图像板上的画廊发布。图库链路看起来像这样快速提取URL列表并检查有效性的方法
https://example.com/a/1234/a6fb1049/
其中1234是一个正数(ID)和a6fb1049是固定长度10(令牌)的十六进制字符串。 现在我只能够处理以图库链接开始的消息。
if message_object.content.startswith("https://example.com/a/"):
我正在寻找一个快速的方式来处理消息字符串,因为每次发送消息,这将被调用。
if message_object.content.startswith("https://example.org/a/"):
temp = message_object.content.split("/")
# Check if link is actually a valid link
if temp[2] == "example.org" and temp[3] == "a" and 0 < int(temp[4]) and len(temp[5]) == 10:
gallery_id = temp[4]
gallery_token = temp[5]
response = requests.post(url, payload, json_request_headers)
我想过使用urllib.parse.urlparse和posixpath.split分割字符串,并检查不同的子串,但我觉得这是低效的。
因为我对Regex不太好,这就是我想出来的。
searchObj = re.search(r'https://example.org/a/(.*)/(.*)/', message)
如果只有一个匹配的模式,它是正确的,但它是正确的,但只要有两个链接,这已经失败。
我宁愿让匹配列表中的链接的所有消息,然后迭代列表并检查页面的标题,如果链接有效。然后创建一个API请求来检索数据。
匹配Stackoverflow上的URL的正则表达式不显示如何匹配这些特定的情况,所以我很抱歉,如果这是一个新问题。
“我宁愿让所有匹配列表中的链接的消息,然后遍历列表” - 听起来像你需要['re.findall'](https://docs.python.org/2/library/ re.html#re.findall) – asongtoruin