2012-02-22 17 views
7

Mam ciąg/wzorzec tak:Python: Jak uzyskać wiele elementów wewnątrz nawiasów kwadratowych

[xy][abc] 

próbuję uzyskać wartości zawarte wewnątrz nawiasów kwadratowych:

  • xy
  • abc

W nawiasach nie ma nawiasów. Nieprawidłowy: [[abc][def]]

Do tej pory mam to:

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

Ale to daje mi tylko wartość wewnętrzną pierwszych nawiasach kwadratowych.

Wszelkie pomysły? Nie chcę używać funkcji podziału na ciągi znaków, jestem pewien, że jest to możliwe w przypadku samego RegEx.

+0

czy sprawdziłeś 'm.group (2)' – Endophage

+0

grupa (2) to Brak – Patric

Odpowiedz

17

re.findall jest Twój przyjaciel tutaj:

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

Podejrzewam szukasz re.findall.

Zobacz this demo:

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

Jeśli chcesz iteracyjne nad pasuje zamiast strun meczu, można spojrzeć na re.finditer zamiast. Aby uzyskać więcej informacji, zobacz Python re docs.

+0

Czy nie powinieneś uciekać wewnętrznie]? – Gangnus

Powiązane problemy