Ne pas utiliser regexp:
Voici pourquoi vous devriez not think at regex en premier lieu lorsqu'ils traitent avec HTML ou XML (ou URL).
Si vous souhaitez utiliser regex de toute façon,
Vous pouvez trouver plusieurs modèle qui font le travail, et plusieurs façons d'aller chercher les chaînes que vous souhaitez trouver.
Ces modèles font le travail:
r'\(a href="(.*?)"\)'
r'\(a href="(.*)"\)'
r'\(a href="(+*)"\)'
1. re.findall()
re.findall(pattern, string, flags=0)
Retour tous les matchs ne se chevauchent pas de motif dans la chaîne, comme une liste de chaînes . La chaîne est numérisée de gauche à droite et les correspondances sont renvoyées dans l'ordre trouvé. Si un ou plusieurs groupes sont présents dans le modèle, renvoie une liste de groupes; ce sera une liste de tuples si le motif a plus d'un groupe. Les matchs vides sont inclus dans le résultat à moins qu'ils ne touchent le début d'un autre match.
import re
st = 'blahblahblah (a href="example.com") another bla <a href="polymer.edu">'
re.findall(r'\(a href="(+*)"\)',s)
2. re.search()
re.search(pattern, string, flags=0)
parcourons chaîne à la recherche d'un endroit où le motif d'expression régulière produit un match, et retourner un correspondant Instance MatchObject.
Puis, passez à re.group()
par groupes. Par exemple, en utilisant regex r'\(a href="(.+?(.).+?)"\)'
, qui fonctionne également ici, vous avez plusieurs groupes fermés: le groupe 0 correspond au modèle entier, le groupe 1 correspond au premier sous-modèle entouré entouré de parenthèses,
Vous utiliseriez la recherche lors de la recherche de la première occurrence du modèle uniquement. Et avec votre exemple ce serait
>>> st = 'blahblahblah (a href="example.com") another bla (a href="polymer.edu")'
>>> m=re.search(r'\(a href="(.+?(.).+?)"\)', st)
>>> m.group(1)
'example.com'
Vos chaînes sont-elles HTML? Si c'est le cas, n'utilisez pas regex. Si ce n'est pas le cas, il existe certainement de nombreuses expressions régulières correspondant aux URI. Vous pourriez essayer de donner une chance à l'un d'entre eux et revenir pour poser une question plus précise si vous êtes coincé. – bernie
S'il vous plaît ne pas oublier de laisser un commentaire aux répondants et à upvote ceux que vous avez trouvé utile! :) – mac