Toán tử | (vertical bar) cho phép khớp một trong nhiều lựa chọn thay thế.
Cơ bản
airways|airplane|bomber # khớp "airways" HOẶC "airplane" HOẶC "bomber"
Nhóm (grouping) với ngoặc đơn
air(ways|plane)|bomber # tương đương nhưng gọn hơn
Capturing group vs Non-capturing group
(air(ways|plane)|bomber)— tạo 2 capturing groups nếu khớp nhánh đầu.(air(?:ways|plane)|bomber)—?:vô hiệu hóa capturing cho group con, chỉ còn 1 group.
Ví dụ
import re
s = 'airways aircraft airplane bomber'
print(re.findall(r'(airways|airplane|bomber)', s))
# ['airways', 'airplane', 'bomber']
print(re.findall(r'(air(ways|plane)|bomber)', s))
# [('airways', 'ways'), ('airplane', 'plane'), ('bomber', '')]
print(re.findall(r'(air(?:ways|plane)|bomber)', s))
# ['airways', 'airplane', 'bomber']
Mẹo: Dùng non-capturing group (?:...) khi không cần backreference để tăng hiệu năng và đơn giản kết quả.