2012-12-20 37 views
14

Đây là các trường hợp. Tôi đang tìm mẫu sau trong tệp nhật ký.Regex và toán tử OR không có nhóm trong Python?

Tất cả các chuỗi đều ở dạng AB_N hoặc CDE_N. ABCDE là các chữ cái cố định, theo sau là dấu gạch dưới. N có thể là 2 hoặc 3 số.

Tôi đã thử (AB|CDE)_\d{2,3} nhưng trả về một nhóm. Tôi không thể làm \w{2,3}\d{2,3} vì nó phải là AB hoặc CDE và không phải AC hoặc FEG. Bỏ qua các dấu ngoặc đơn cũng bị phá vỡ. Tôi chắc chắn giải pháp là đơn giản nhưng tôi mới để python và regex và không thể tìm ra điều này.

+0

Bạn có thể bọc toàn bộ nội dung trong một nhóm: '((AB | CDE) _ \ d {2,3})', và nhóm đầu tiên là 'AB_123' và nhóm thứ hai chỉ là' AB'. –

Trả lời

28

A ?: bên trong dấu ngoặc đơn trong regex làm cho nó không bị bắt. Giống như vậy: (?:AB|CDE)_\d{2,3}

Xem tài liệu tại đây: http://docs.python.org/3/library/re.html Khoảng 1/3 cách vượt qua cú pháp không bắt giữ.

+0

là thế! rực rỡ .. cảm ơn bạn – pedram

3

Cú pháp nhóm không chụp là (?:...). Vì vậy, hãy (?:AB|CDE)_\d{2,3}. Đây là documented cùng với mọi thứ khác.

+0

điều này không có tác dụng, nhưng sử dụng (? AB | CDE) đã làm. – pedram

+2

Rất tiếc, một lỗi đánh máy. Nhưng có vẻ như bạn đã làm một cái, vì nó phải là '(?: AB | CDE)'. – BrenBarn

+1

Tôi có thể làm điều gì đó như '(?: Abc | def | ghi | xyz)'? – qed

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