Je recherche une expression régulière qui correspond au code J'ai réussi à trouver des expressions de trois termes maximum, tels que Merci pour l'aide. P > prêt-à-travailler , prêt-à-travailler-aujourd'hui , prêt-à-fonctionner >. J'ai placé les multiples options de cette manière: text=''' ready-to-work ready-to ready-to-work-today'''
re.findall(r'\b[a-zA-Z0-9]+?-[a-zA-Z0-9]+?-[a-zA-Z0-9]+?\b', text)
['ready-to-work'] code> mais je ne peux pas capturer ready-to et ready-to-work-today . J'attends ['ready-to-work','ready-to','ready-to-work-today'letter.
3 Réponses :
Essayez cette expression régulière \ b \ w + (- \ w +) + \ b .
Merci, mais j'ai trouvé: ['-work', '-to', '-today'] ... c'est le dernier mot de chaque terme. D'après ce que vous proposez, j'ai fait: re.findall (r '\ b (\ w + [\ - \ w +] +) \ b', texte). Cela jette le résultat que je recherchais. Merci.
Le regex fonctionne très bien, c'est juste que vous ne sortez que match.group (1) . Ajoutez une autre paire de parenthèses autour de l'expression régulière entière, ou retirez simplement la correspondance complète.
Si vous voulez faire correspondre le trait d'union et la classe de caractères 1 à 3 fois, vous pouvez utiliser un groupe non capturant avec un quantificateur {1,3} . Pour les faire correspondre une fois ou plus, utilisez plutôt un + .
\b[a-zA-Z0-9]+(?:-[a-zA-Z0-9]+){1,3}\b
\ b Limite de mot [a-zA-Z0-9] + Correspond à l'une des 1+ fois répertoriées (?: Groupe sans capture
- [a-zA-Z0-9] + correspond à - et 1 fois ou plus l'un des éléments répertoriés ) {1,3} Fermez le groupe sans capture et répétez 1 à 3 fois \ b Limite de mot Je suppose que cette expression pourrait renvoyer la sortie souhaitée:
['ready-to-work', 'ready-to-work-today', 'ready-to', 'ready-to-work', 'ready-to', 'ready-to-work-today', 'ready-to', 'ready-to-work-todayready-to', 'ready-to-work-today']
re.findallimport re regex = r"\b(?:\w+-\w+(?:[\w-])*)\b" test_str = "ready-to-work ready-to-work-today ready-to ready-to-work ready-to ready-to-work-today ready-to ready-to-work-todayready-to ready-to-work-today" print(re.findall(regex, test_str))
Qu'en est-il de
r '[\ w -] +'ou doit-il y avoir au moins un-?Votre spécification est plutôt imprécise. À quoi voulez-vous qu'il corresponde exactement?