如何用正则提取Twitter链接中的用户名(URL参数可选)
提取Twitter链接用户名的正则解决方案
正确正则表达式
使用以下正则即可一次性匹配所有符合要求的Twitter链接,精准提取用户名:
twitter\.com\/([^?]+)
正则说明
twitter\.com\/:匹配固定域名部分,其中\.是正则中转义后的点(避免匹配任意字符)。([^?]+):捕获一个或多个非问号的字符,自动截止到第一个?(如果存在),完美避开URL参数部分。
代码示例(Python)
import re link_list = [ "https://twitter.com/test1", "http://twitter.com/test2", "https://www.twitter.com/test3?", "https://www.mobile.twitter.com/test4", "https://www.twitter.com/test5?lang=en", "https://www.instagram.com/test1insta" ] for link in link_list: match_result = re.search(r'twitter\.com\/([^?]+)', link) if match_result: print(match_result.group(1))
运行后输出:
test1 test2 test3 test4 test5
之前正则的问题分析
- 正则
r'twitter.com\/(.*)\?':
要求链接必须包含?才能匹配,因此不带参数的链接无法被捕获,只能拿到test3和test5。 - 正则
r'twitter.com\/(.*)\??':.*是贪婪匹配,会从twitter.com/后一直匹配到字符串末尾,即便存在?也会将参数部分一并包含,导致结果出现test3?、test5?lang=en这类错误内容。
结论
无需分情况处理,上述单个正则即可覆盖所有Twitter链接的用户名提取场景,同时自动过滤Instagram等非目标链接。
内容的提问来源于stack exchange,提问作者Liam
相关产品推荐
相关产品推荐

