2010-05-17 5 views
7

de la chaîne ci-dessous, je veux extraire les mots entre delimters [ ] comme 'Service Current','Service','9991','1.22':mots entre délimiteurs extraction [] en python

str='mysrv events Generating Event Name [Service Current], Category [Service] Test [9991] Value [1.22]' 

Comment puis-je extraire le même en python?

Merci à l'avance Kris

Répondre

18

Tout d'abord, évitez d'utiliser str comme nom de variable. str a déjà une signification en Python et en le définissant comme quelque chose d'autre vous allez confondre les gens.

Cela dit, vous pouvez utiliser l'expression régulière suivante:

>>> import re 
>>> print re.findall(r'\[([^]]*)\]', s) 
['Service Current', 'Service', '9991', '1.22'] 

Cela fonctionne comme suit:

 
\[ match a literal [ 
( start a capturing group 
[^]] match anything except a closing ] 
* zero or more of the previous 
) close the capturing group 
\] match a literal ] 

Une expression régulière alternative est:

r'\[(.*?)\]' 

Cela fonctionne par en utilisant un match non-gourmand au lieu de correspondre à tout sauf ]

+2

+ 1 L'expression devient plus facile si vous venez de le rendre non-gourmand: \\ '' [\\ (*.?)]. [Lien vers 're.findall()'] (http://docs.python.org/library/re.html#re.findall), [lien vers 're'] (http://docs.python.org /library/re.html) –

+0

@Felix: Ajouté, merci. –

+0

Ces expressions correspondent également à la chaîne '' [] '', en renvoyant '['']' (la chaîne vide). Si les crochets sans caractères entre eux doivent être ignorés, le '*' peut être changé en '+' dans la première expression. C'est-à-dire, 'r '\ [([^]] +) \]''. (Fait intéressant, remplacer le '*' dans l'expression non-gloutonne ne semble pas fonctionner.) – jpmc26

2
re.findall(r'\[([^\]]*)\]', str) 
4

vous pouvez utiliser regex

import re 
s = re.findall('\[(.*?)\]', str) 
+0

hey im luttant pour comprendre ceci je comment je modifierais ce code pour extraire le mot de ceci ('mot °',) ainsi entre ('et') y at-il des tutoriels utiles que vous pouvez me diriger vers –

Questions connexes