2012-02-22 14 views
7

Ho una stringa/modello come questo:Python: Come ottenere più elementi tra parentesi quadre

[xy][abc] 

cerco di ottenere i valori contenuti all'interno delle parentesi quadre:

  • xy
  • abc

Non ci sono mai parentesi tra parentesi. Non valido: [[abc][def]]

Finora ho ottenuto questo:

import re 
pattern = "[xy][abc]" 
x = re.compile("\[(.*?)\]") 
m = outer.search(pattern) 
inner_value = m.group(1) 
print inner_value 

Ma questo mi dà solo il valore interno delle prime parentesi quadre.

Qualche idea? Non voglio usare le funzioni split-string, sono sicuro che è possibile in qualche modo con RegEx da solo.

+0

hai controllato 'm.group (2)' – Endophage

+0

gruppo (2) è Nessuno – Patric

risposta

17

re.findall è tuo amico qui:

>>> import re 
>>> sample = "[xy][abc]" 
>>> re.findall(r'\[([^]]*)\]',sample) 
['xy', 'abc'] 
4
>>> import re 
>>> re.findall("\[(.*?)\]", "[xy][abc]") 
['xy', 'abc'] 
3

Ho il sospetto che stai cercando re.findall.

Vedi this demo:

import re 
my_regex = re.compile(r'\[([^][]+)\]') 
print(my_regex.findall('[xy][abc]')) 
['xy', 'abc'] 

Se volete iterare su partite, invece di stringhe di corrispondenza, si potrebbe guardare re.finditer invece. Per ulteriori dettagli, vedere Python re docs.

+0

Non dovresti scappare interiormente? – Gangnus

Problemi correlati