Je voudrais faire correspondre la dernière occurrence d'un motif à l'aide de regex.
J'ai du texte structuré de cette manière: p> Je veux correspondre au dernier texte entre Deux Notez qu'il existe des espaces blancs après le dernier J'ai essayé ceci: p> code> dans mon cas
Tizi Ouzou code>, idéalement le Tizi Ouzou code> String P> code> em> p> <br>.*<br>\s*$
6 Réponses :
Vous pouvez utiliser dans quantifier gourmand avec une classe de caractères réduite (en supposant que vous n'avez aucune balise entre vous ou p> pour permettre des balises à l'intérieur. p> Étant donné que la chaîne que vous recherchez est code>): Tizi Ouzou code> sans code> code> vous peut extraire le premier groupe de capture. P> p>
@ m.Buettner: Vous avez raison, car la chaîne est analysée de gauche à droite et arrête à la première occurrence de code>
Essayez: Il consomme d'abord toutes les données jusqu'à ce que le dernier Il donne: P> code> et des backtracks jusqu'à ce qu'il vérifie avec une autre code> après cela, puis extrait le contenu entre eux. P> re.match(r'(?s).*<br>(.*)<br>', s).group(1)
Pas besoin de la lookahead - le motif après que le lookahead vérifie exactement la même chose.
@ m.Buettner: merci. Ajouté cette version à la réponse.
Une approche non regex à l'aide de la fonction str code> STR: text = """
Pellentesque habitant morbi tristique senectus et netus et
lesuada fames ac turpis egestas. Vestibulum tortor quam, feugiat vitae
ultricies eget, tempor sit amet, ante. Donec eu libero sit amet quam
egestas <br>semper<br>tizi ouzou<br>Tizi Ouzou<br> """
res = text.rsplit('<br>', 2)[-2]
#Tizi Ouzou
Comment sur impression p> [^ <>] * code> au lieu de . * code>:
Regardez les questions connexes: Vous ne devriez pas analyser HTML avec Regex . Utilisez plutôt un analyseur Regex. Pour Python, j'entends Belle soupe est la voie à suivre.
Quoi qu'il en soit, si Vous voulez le faire avec regex, vous devez vous assurer que . * code> ne peut pas dépasser un autre code>. Pour ce faire, avant de consommer chaque personnage, nous pouvons utiliser un Lookahead pour que ce soit Ne démarre pas un autre code>: p>
Pour moi, le moyen le plus clair est:
Essayez
. *? Code> au lieu de. * Code>.@Waleedkhan qui n'aidera pas