J'ai ce genre de chaînes: sans aucun CR / LF, tout est sur une ligne. p> Je veux créer une regex qui: < / p> jusqu'à présent, j'ai écrit: p> mais il ne capture que le dernier GUI. J'ai besoin de comment réutiliser le préfixe
/ transfert / paquets / code> li>
" code> li>
/ transfert / paquets / code> et continuez à faire correspondre avec impatience la recherche à chaque fois sans passer à partir du préfixe. P> P>
3 Réponses :
de ceci donc Réponse : P>
Quant à la deuxième question, c'est un problème courant. Il n'est pas possible d'obtenir un nombre arbitraire de captures avec une regex PCRE, comme en cas de captures répétées, seule la dernière valeur capturée est stockée dans le tampon de groupe. Vous ne pouvez pas avoir plus de submatchs dans la matrice résultante que le nombre de groupes de capture à l'intérieur du motif de regex. Voir Répéter un groupe de capture vs capturer un groupe répété pour plus de détails. P> blockQuote>
Je comprends. Donc, la seule manière générique serait de le faire en deux étapes, non?
Je ne sais pas si cela pourrait être accompli avec deux étapes. La récursion peut être faite avec deux étapes, mais dans PCRE, elle ne captive que un groupe dans son ensemble et ne les divise pas.
Merci très intéressant de savoir.
Si vous utilisez le module re code> dans Python, utilisez peut-être
str.startwith code> et essayez:
Merci, cependant, le url = "" code> fait lui-même partie de la chaîne à rechercher dans, je suppose que cela n'est pas clair de mon message original, je vais le modifier.
Vous pouvez utiliser le module PYPI Regex qui prend en charge des quantificateurs de longueur infinie dans le lookebehind: exemple Démo Regex (avec un autre moteur sélectionné pour But de démonstration) ou voir un Python Demo P> Une autre option est de la première correspondance la ligne qui a alors vous pouvez utiliser par exemple RE.FindAll Pour obtenir tous les GUID. P>
url = "/ transfert / paquets / code> suivi d'un GUID et correspond à la double citation suivante. p>
['00000000-0000-0000-0000-000000000000', '68f74d66-ca3d-4272-9b59-4f737946b3f7', '138bb190-3b12-4855-88e2-0d1cdf46aeb5']
J'ai été lus avec le module code> regex code> pour une bonne heure maintenant. Ne pouvait pas le craquer. Bien fait. J'ai continué à regarder les options \ g code> mais je suis trop inexpérimenté pour faire ce travail. +
@JVDV Si vous souhaitez utiliser le \ g code>, vous devez trouver un moyen d'obtenir des correspondances en continu à l'aide de la position à la fin de la correspondance précédente. Une option pourrait être Regex101.com/r/yme3vz/1 . Les chances sont que ce modèle peut être simplifié :-)
Donc, vous voulez faire correspondre chacun des GUIDS tant qu'ils sont dans une chaîne qui commence par
/ transfert / packages / code>, oui?
Vous avez raison. (Plus tard dans la même chaîne, il peut y avoir d'autres URL = "/ transfert / package / ..." et ils doivent être capturés également, mais je ne pense pas que cela soit pertinent parce qu'il est donc tout à fait un autre morceau de la chaîne)
Quelle application utilisez-vous? BTW,
- [A-ZA-Z0-9] {4} - [A-ZA-Z0-9] {4} - [A-ZA-Z0-9] {4} code> est meilleur écrit
(?: - [a-za-z0-9] {4}) {3} code> peut-être?
Et au lieu d'essayer de le faire en une fois, utilisez peut-être deux étapes. Vérifiez d'abord si votre chaîne commence avec votre condition, utilisez un motif comme
[A-ZA-Z0-9] {8} (?: - [A-ZA-Z0-9] {4}) {3}) {3} - [A-ZA-Z0-9] {12} CODE> Pour trouver toutes les sous-chaînes d'intérêt.
Oui, cela résout le problème. Cependant, je suis curieux de savoir si cela peut être fait dans un seul passage!
Quelle est la langue? Bien sûr, cela peut être fait, mais pas dans toutes les langues.
J'utilise la bibliothèque
re code> dans Python3.6, cependant, ce n'est pas si indépendant de la langue?
Alors il ne peut pas.