2010-05-17 17 views
7

Von unten Zeichenfolge, ich mag die Worte zwischen delimters [ ] wie 'Service Current','Service','9991','1.22' extrahieren:Extrahieren von Worten zwischen Begrenzungszeichen [] in Python

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

Wie kann ich das gleiche in Python zu extrahieren?

Vielen Dank im Voraus Kris

Antwort

18

Zuerst vermeiden str als Variablenname verwendet wird. str hat bereits eine Bedeutung in Python und indem Sie es als etwas anderes definieren, werden Sie die Leute verwirren.

auch sagen, dass Sie die folgenden regulären Ausdruck verwenden:

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

Dies funktioniert wie folgt:

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

Eine Alternative regulärer Ausdruck ist:

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

Dies funktioniert durch Verwenden Sie eine nicht gierige Übereinstimmung, anstatt irgendetwas zu vergleichen, außer ].

+2

+ 1 Der Ausdruck wird einfacher, wenn Sie es einfach machen nicht gierige: '' \\ [\\ (*.?)]. [Link zu 're.findall()'] (http://docs.python.org/library/re.html#re.findall), [link zu 're'] (http://docs.python.org /library/re.html) –

+0

@Felix: Hinzugefügt, danke. –

+0

Diese Ausdrücke stimmen auch mit der Zeichenkette ''[]'' überein und geben '[''' '(die leere Zeichenkette) zurück. Wenn eckige Klammern ohne Zeichen zwischen ihnen ignoriert werden sollen, kann das '*' im ersten Ausdruck in '+' geändert werden. Dh "r" \ [([^]] +) \] ''. (Interessanterweise scheint das Ersetzen des '*' im nicht-gierigen Ausdruck nicht zu funktionieren.) – jpmc26

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

können Sie verwenden regex

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

Hey, ich kämpfe darum, das zu verstehen, wie würde ich diesen Code modifizieren, um daraus ein Wort ('word °') zu extrahieren ('und') gibt es nützliche Tutorials, zu denen Sie mich anleiten können –

Verwandte Themen