2015-09-28 57 views
7

Tôi muốn tìm tất cả dữ liệu được đính kèm trong [[ ]] các dấu ngoặc đơn này.Trích xuất một phần regex của Python

[[aaaaa]] -> aaaaa

mã python của tôi (bằng thủ tục re thư viện) là

la = re.findall(r'\[\[(.*?)\]\]', fa.read()) 

gì nếu tôi muốn chỉ trích 'a' từ [[a|b]]

Bất kỳ biểu thức chính quy chính xác nào cho tác vụ này? (trích xuất dữ liệu trước |)

Hoặc tôi có nên sử dụng câu lệnh if nếu không?

Trả lời

3

Bạn có thể thử:

r'\[\[([^\]|]*)(?=.*\]\])' 

([^\]|]*) sẽ phù hợp cho đến khi một | hoặc ] được tìm thấy. Và (?=.*\]\]) là một điều đáng chú ý để đảm bảo rằng ]] được kết hợp trên RHS của trận đấu.

Thử nghiệm:

>>> re.search(r'\[\[([^\]|]*)(?=.*\]\])', '[[aaa|bbb]]').group(1) 
'aaa' 
>>> re.search(r'\[\[([^\]|]*)(?=.*\]\])', '[[aaabbb]]').group(1) 
'aaabbb' 
+1

Cảm ơn bạn đã cung cấp câu trả lời súc tích và giải thích. Tôi nên đọc thêm các bài viết về cụm từ thông dụng. – SUNDONG

+0

Chỉ có một điều cần lưu ý - điều này sẽ không xử lý các dấu ngoặc lồng nhau (và trong thực tế, một regex sẽ không nói chung anyway mà không có sự giúp đỡ của một truy cập). – brandonscript

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