2012-02-22 36 views
7

Tôi có một chuỗi/mô hình như thế này:Python: Làm thế nào để có được nhiều yếu tố bên trong dấu ngoặc vuông

[xy][abc] 

tôi cố gắng để có được các giá trị chứa bên trong dấu ngoặc vuông:

  • xy
  • abc

Không bao giờ có dấu ngoặc trong ngoặc vuông. Không hợp lệ: [[abc][def]]

Cho đến nay tôi đã nhận điều này:

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

Nhưng điều này mang lại cho tôi chỉ có giá trị bên trong của dấu ngoặc vuông đầu tiên.

Bất kỳ ý tưởng nào? Tôi không muốn sử dụng chức năng chia chuỗi, tôi chắc chắn nó có thể bằng cách nào đó với RegEx một mình.

+0

bạn đã kiểm tra 'm.group (2)' – Endophage

+0

nhóm (2) là Không – Patric

Trả lời

17

re.findall là bạn của bạn ở đây:

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

tôi nghi ngờ bạn đang tìm kiếm re.findall.

Xem this demo:

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

Nếu bạn muốn để lặp qua phù hợp thay vì chuỗi trận đấu, bạn có thể nhìn vào re.finditer để thay thế. Để biết thêm chi tiết, xem Python re docs.

+0

Bạn không nên trốn thoát bên trong]? – Gangnus

Các vấn đề liên quan