2017-10-11 13 views
1

J'ai un script python en utilisant BeautifulSoup pour gratter. Ceci est mon code:Python re.findall retourner les liens avec une chaîne non désirée par la suite

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

qui est conçu pour trouver des liens comme:

stream://987cds9c8ujru56236te2ys28u99u2s 

Mais il revient aussi des chaînes comme ceci:

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

-à-dire avec des espaces et des choses supplémentaires que je Je ne veux pas. Comment puis-je exprimer le

re.findall 

Donc, il ne renvoie que la première partie du lien?

(Merci à l'avance)

+0

'' $ est l'expression rationnelle pour la fin de chaîne – Eqomatic

Répondre

1

Vous pouvez utiliser un match non gourmand (en ajoutant ? au motif) avec un mot de caractères limite '\b':

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

Ou si vous voulez correspondre seul mot caractères que vous pouvez simplement utiliser '\w+':

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

Merci pour cette aide, mais Unfortuna La chaîne du lien n'est pas un mot - elle peut être composée de lettres et de chiffres, de sorte que les limites de mots ou les caractères de mots ne fonctionnent pas. Je vais essayer avec $ suggestions ci-dessus comme limite pour la fin de la chaîne. La suggestion non-gourmande aide cependant. – manners

+0

@manners J'ai dit * si *, jamais dit que ça marcherait dans tous les cas. Aussi, vous voulez dire que la première approche ne fonctionne pas? –

+0

Ça a marché. Je vous remercie. – manners