Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Python

Alternation (|) — Lựa chọn thay thế trong regex Python

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ả.