例如,我有6个字符串如下:
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
我想做的是从这些链接中提取twitter的“用户名”,所以在这种情况下,我想用正则表达式搜索每个链接,以获得twitter.com/
之后的用户名,在链接的url参数为?
的情况下,我想获得它之前的所有内容。
例如,它会是这样的:
x一个八个一个x一个九个一个x一个十个一个x一个十个一个x一个十个x一个十个一个x一个十个x一个
我已经使用搜索来获取模式,但我一直在纠结如何让它只提取我想要的部分。以下是我尝试过的方法:username = re.search(r'twitter.com\/(.*)\?', stringsList)
个
这导致只匹配那些后面有问号的字符串,我理解。所以只有test3
和test5
。
我想我可以尝试通过以下操作使问号可选:username = re.search(r'twitter.com\/(.*)\??', stringsList)
而是只返回所有的用户名以及我想要的所有附加内容,例如:
x 1米17个一个x 1米18个一个x 1米19个一个x 1米20个一个x 1米21个一个
但我希望它仍然只提取用户名作为组1,即使?应该是可选的。
我的正则表达式应该是什么样子的呢,或者我需要把它分开,先检查字符串是否有问号,然后根据它是否存在,使用两种不同的搜索方法吗?
我有一个代码为here的测试位
我一直在尝试使用this来确定我想要的正则表达式
2条答案
按热度按时间jdgnovmf1#
要成为域不可知论者:
用户名应该在组1中。this answer的修改版本,它有几个其他的好方法。
我更改了最后一个过滤器,不包括特殊字符。如果下划线有效,则可以添加到最后一个捕获组:
或者类似这样的东西把所有东西都放到
?
上:wi3ka0sx2#
您可以使用查找来避免匹配第一部分。然后将右侧的匹配限制为除“?”和空格之外的任何字符。
可以通过删除组捕获(
username.group(1)
变为username
)来简化python代码,如下所示:正则表达式演示here。Python演示here。