2010-05-17 8 views
7

de la cadena a continuación, quiero extraer las palabras entre delimters [ ] como 'Service Current','Service','9991','1.22':La extracción de palabras entre delimitadores [] en Python

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

¿Cómo puedo extraer la misma en Python?

Gracias de antemano Kris

Respuesta

18

En primer lugar, evitar el uso de str como nombre de variable. str ya tiene un significado en Python y al definirlo como algo diferente, confundirás a las personas.

Dicho esto se puede utilizar la siguiente expresión regular:

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

Esto funciona de la siguiente manera:

 
\[ 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 ] 

Una expresión regular alternativa es:

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

Esto funciona utilizando una coincidencia no codiciosa en lugar de hacer coincidir cualquier cosa excepto ].

+2

+ 1 La expresión se vuelve más fácil si sólo lo hace no expansivo: '' \\ [\\ (*.?)]. [Enlace a 're.findall()'] (http://docs.python.org/library/re.html#re.findall), [enlace a 're'] (http://docs.python.org /library/re.html) –

+0

@Felix: Agregado, gracias. –

+0

Estas expresiones coincidirán con la cadena ''[]'' también, devolviendo '['']' (la cadena vacía). Si se deben ignorar los corchetes sin caracteres entre ellos, el '*' se puede cambiar a '+' en la primera expresión. Es decir, 'r '\ [([^]] +) \]''. (Curiosamente, reemplazar el '*' en la expresión no codiciosa no parece funcionar.) – jpmc26

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

puede utilizar expresiones regulares

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

hey estoy luchando para entender esto i cómo voy a modificar ese código para extraer palabra de esto ('word °',) así que entre ('y') ¿hay algún tutorial útil que pueda dirigirme a –

Cuestiones relacionadas