2016-08-09 16 views
1

ich die Zeichenfolge innerhalb der eckigen Klammer holen wollen, die als Array gegebender String in Klammern

u16 arrayName_1[8][7] 

Ich habe Python-Code, der die 1-Dimensional Array finden und den Charakter innerhalb squre Klammern bekommen.

var = 'u16 arrayName_1[8]' 
index = re.split('\[(.*?)\]', str(var)) 

index [0] gibt 'u16 arrayName_1'.

index [1] ergibt "8".

Problem: Ich möchte String in Klammern von 2D-Array erhalten. Ich habe versucht, unter Code, aber es ist nicht das gewünschte Ergebnis.

var = u16 arrayName_1[8][7] 
index= re.split('(\[.*\])$', str(var)) 

index [0] gibt 'u16 arrayName_1'.

index [1] wird '[8] [7]' geben. Das ist ein falsches Ergebnis.

Ich möchte eine Ausgabe wie:

Index [1] = '8'

Index [2] = '7'

+0

Haben Sie versucht * mit * Ihrem Muster übereinzustimmen? ['re.findall (r '\ [(. *?) \]', str (var))'] (https://ideone.com/JFfHYD) –

+0

Nein, ich versuche es nicht. – user2030113

Antwort

3

Sie können Ihr eigenes Muster in re.findall verwenden, um alle Inhalte zu packen innen [...]:

import re 
var = 'u16 arrayName_1[8][7]' 
index = re.findall(r'\[(.*?)\]', var) 
print(index) # => ['8', '7'] 

Siehe Python demo

Verwenden Sie \[([0-9]+)] regex, um nur Ziffern nach innen zu passen. Außerdem müssen Sie das ] Symbol außerhalb der Zeichenklasse nicht umgehen, und Sie sollten in Erwägung ziehen, raw-Zeichenfolgenliterale zu verwenden, um Ihre Regex-Muster zu definieren, um Verwechslungen mit nicht gesicherten Backslashes zu vermeiden.

+0

Hinweis: Dies funktioniert nicht, wenn der Index selbst einen Index hat, wie in 'foo [bar [1]]'. (Dies war keine Voraussetzung, wollte nur auf die Einschränkungen hinweisen ...) –

+0

Ja, deshalb schlug ich auch '\ [([0-9] +)]' 'vor. –

Verwandte Themen