J'essaie d'extraire la dernière déclaration entre parenthèses. Cependant, mon code renvoie chaque relevé entre parenthèses plus tout compris entre.
ex: 'Qu'est-ce que vous [faites] vous [faire]' P>
Je veux ', mais je reviens' [ sont] vous [faire] 'quand je courais re.search. P>
i Ran Re.Search en utilisant une expression de regex qui devrait obtenir la dernière instruction entre parenthèses (plus les crochets) et rien d'autre. J'ai également essayé d'ajouter \ S + au début dans l'espoir de le réparer, mais ce ne serait pas. P>
string = '[What] are you [doing]' m = re.search(r'\[.*?\]$' , string) print(m.group(0))
6 Réponses :
re.findall (r '\ [(. +?) \]', 'Qu'est-ce que [sont] vous [faites]' ') [- 1] code> ['doing']
Selon la condition pour extraire la dernière instruction entre parenthèses em>:
Une solution mineure avec votre regex. Vous n'avez pas besoin du sortie: p> $ code> à la fin. Et utilisez également re.findall code> plutôt que re.search code>
'[are]'
Vous pouvez utiliser sortie p> Ceci fonctionnera également avec L'exemple posté par @MONKEYEZEUS dans les commentaires. Si la dernière valeur est vide, il ne faut pas renvoyer la valeur vide. Par exemple p> sortie p> retranchez code> et obtenir le dernier index
Vous pouvez utiliser un motif de lookahead négatif pour vous assurer qu'il n'y a pas une autre paire de crochets pour suivre la paire de crochets correspondante: ou vous pouvez utiliser . * / Code> Pour consommer tous les caractères de tête jusqu'à la dernière correspondance possible: P> re.search(r'.*(\[.*?\])', string).group(1)
Je veux '[faire]' i> - op. - Votre code est donc incorrect
Comment est-ce incorrect? Voir Démo: repl.it/repls/unwieldyoverDueBlifient
Je ne l'ai pas testé, mais vous devez modifier votre réponse: Les deux du code ci-dessus reviendraient: 'bar' code> i>. Il renvoie '[bar]' code>
Mon code avait raison. Mon édition était pour ajouter une deuxième solution. Mais vous êtes correct ici que ma valeur de retour indiquée manquait de manière incorrecte les crochets, qui était une faute de frappe de ma part. Merci de le pointer.
Ceci capture des segments de crochets avec quoi que ce soit entre les supports (pas nécessairement des lettres ni des chiffres: tous les symboles / espaces / etc.): donne p>
m = re.search (r '. * (\ [. *? \]) $', string); m.group (1) code>Est-il possible de rencontrer
qu'est-ce que vous [faites]? Code>?Que devriez-vous arriver pour
qu'est-ce que vous [êtes] code>?(?:. *) (\ [. +? \]) code> devrait le faire mais je n'ai pas testé des cas de bord.@MONKEKEYZEUS Cette regex ne fonctionne pas
Prouver que cela échoue.