Computer >> Máy Tính >  >> Lập trình >> Python

Các lựa chọn thay thế biểu thức chính quy hoạt động như thế nào trong Python?

Thay thế và ứng dụng của chúng

Trong các ứng dụng thế giới thực, chúng tôi thường sử dụng cụm từ thông dụng phù hợp với bất kỳ một trong hai hoặc nhiều lựa chọn thay thế. Ngoài ra, đôi khi chúng tôi sử dụng một bộ định lượng để áp dụng cho một số biểu thức. Tất cả các mục tiêu như vậy đạt được bằng cách nhóm với dấu ngoặc đơn; và, trong việc sử dụng các lựa chọn thay thế, áp dụng sự thay thế bằng thanh dọc (|).

Sử dụng thanh dọc (|)

Luân phiên hữu ích khi chúng ta cần kết hợp bất kỳ một trong số các lựa chọn thay thế khác nhau. Ví dụ:regex airways | airplane | máy bay ném bom sẽ khớp với bất kỳ văn bản nào có chứa đường hàng không hoặc máy bay hoặc máy bay ném bom. Điều tương tự cũng đạt được khi sử dụng máy bay ném bom regex air (cách | máy bay) |.

Nếu chúng ta sử dụng regex (airways | airplane | bomber), nó sẽ khớp với bất kỳ biểu thức nào trong ba biểu thức. Hãy xem xét regex (đường hàng không (cách | máy bay) | máy bay ném bom), có hai lần chụp nếu biểu thức đầu tiên khớp (đường hàng không hoặc máy bay là lần chụp đầu tiên và cách hoặc máy bay là lần chụp thứ hai) và một lần chụp nếu biểu thức thứ hai khớp với ( máy bay ném bom). Chúng ta có thể tắt hiệu ứng chụp bằng cách đặt sau dấu ngoặc đơn mở bằng?:Như thế này:

(máy bay (?:cách | máy bay) | máy bay ném bom)

Mục này sẽ chỉ có một lần chụp nếu khớp với (đường hàng không hoặc máy bay hoặc máy bay ném bom).

Ví dụ

Đoạn mã sau minh họa các điểm được thảo luận ở trên -

import re
s = 'airways aircraft airplane bomber'
result = re.findall(r'(airways|airplane|bomber)', s)
print result
result2 = re.findall(r'(air(ways|plane)|bomber)', s)
print result2
result3 = re.findall(r'(air(?:ways|plane)|bomber)', s)
print result3

Đầu ra

Điều này cho kết quả

['airways', 'airplane', 'bomber']
[('airways', 'ways'), ('airplane', 'plane'), ('bomber', '')]
['airways', 'airplane', 'bomber']