2017-10-11 105 views
1

我有一个使用BeautifulSoup刮的python脚本。这是我的代码:Python re.findall事后返回不需要的字符串链接

re.findall('stream:\/\/.+', link) 

,其目的是找到像链接:

stream://987cds9c8ujru56236te2ys28u99u2s 

但它也返回一个字符串这样的:

stream://987cds9c8ujru56236te2ys28u99u2s [SD] Spanish - (9.15am) 

即用空间和额外的东西,我不想要。我怎样才能表达

re.findall 

所以它只返回链接的第一部分?

(在此先感谢)

+0

'$'是字符串的结尾正则表达式 – Eqomatic

回答

1

您可以使用一个单词边界字符'\b'非贪婪匹配(添加?的图案):

>>> re.findall(r'stream:\/\/.+?\b', link) 
['stream://987cds9c8ujru56236te2ys28u99u2s'] 

或者,如果你想只匹配单词字符,你可以简单地使用'\w+'

>>> re.findall(r'stream:\/\/\w+', link) 
['stream://987cds9c8ujru56236te2ys28u99u2s'] 
+0

感谢这个帮助,但unfortuna链接中的字符串不是一个单词 - 它可以由字母和数字组成,因此单词边界或单词字符不起作用。我将尝试使用上面的$建议作为字符串结尾的边界。不贪心的建议虽然有帮助。 – manners

+0

@manners我说*如果*,从来没有说过它会在所有情况下工作。另外,你的意思是第一种方法不起作用? –

+0

得到它的工作。谢谢。 – manners

相关问题