0
votes

Extraire la dernière déclaration dans [] 'S (regex)

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 commentaires

m = re.search (r '. * (\ [. *? \]) $', string); m.group (1)


Est-il possible de rencontrer qu'est-ce que vous [faites]? ?


Que devriez-vous arriver pour qu'est-ce que vous [êtes] ?


(?:. *) (\ [. +? \]) devrait le faire mais je n'ai pas testé des cas de bord.


@MONKEKEYZEUS Cette regex ne fonctionne pas


Prouver que cela échoue.


6 Réponses :


1
votes

re.findall (r '\ [(. +?) \]', 'Qu'est-ce que [sont] vous [faites]' ') [- 1] code>

['doing']


0 commentaires

0
votes

Selon la condition pour extraire la dernière instruction entre parenthèses : xxx


0 commentaires

0
votes

Une solution mineure avec votre regex. Vous n'avez pas besoin du $ code> à la fin. Et utilisez également re.findall code> plutôt que re.search code> xxx pré>

sortie: p>

'[are]'


0 commentaires

0
votes

Vous pouvez utiliser retranchez et obtenir le dernier index xxx

sortie xxx

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 xxx

sortie xxx


0 commentaires

0
votes

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: xxx pré>

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)


4 commentaires

Je veux '[faire]' - 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' . Il renvoie '[bar]'


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.



0
votes

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.): xxx

donne xxx


0 commentaires