2016-08-17 6 views
1

Ich habe eine Zeichenfolge "Name (etwas)" und ich versuche, den Teil der Zeichenfolge innerhalb der Klammern zu extrahieren!Zeichenkette in Klammern extrahieren - PYTHON

Iv'e versuchte die folgenden Lösungen, aber scheinen nicht die Ergebnisse zu bekommen, die ich suche.

n.split('()') 

name, something = n.split('()') 
+2

Welche Sprache ?. – Maroun

+0

Gute Frage! Python. –

+0

Danke! Schuljungsfehler! –

Antwort

7

Sie eine einfache regex verwenden können alles zwischen den Klammern zu fangen:

>>> s = 'Name(something)' 
>>> re.search('\(([^)]+)', s).group(1) 
'something' 

Die Regex passt der erste "(", dann passt es alles, was nicht a ist ")":

  • \( entspricht das Zeichen "(" wörtlich
  • die Erfassungsgruppe ([^)]+) Gierig passt alles, was nicht a ")"
+0

Danke! macht Sinn, aber ich bekomme den Fehler, dass Re nicht definiert ist, müssen Sie eine Bibliothek für diese Funktion importieren? –

+0

@olly_t 'import re' – Maroun

0

Sie ist gespalten, wie in Ihrem Beispiel verwenden können, aber auf diese Weise

val = s.split('(', 1)[1].split(')')[0] 

oder mit regex

+1

Danke! das hat funktioniert! –

0

Sie re.match verwenden können:

>>> import re 
>>> s = "name(something)" 
>>> na, so = re.match(r"(.*)\((.*)\)" ,s).groups() 
>>> na, so 
('name', 'something') 

das entspricht zwei (.*) was alles bedeutet, wo der zweite zwischen Par ist Entheses \( & \).

0

als Verbesserung @Maroun Maroun ‚s Antwort:

re.findall('\(([^)]+)', s) 

es alle Instanzen von Strings in Klammern findet

Verwandte Themen