Dùng Negative Lookahead (?!...) để khẳng định: tại vị trí hiện tại, pattern bên trong không được khớp. Lookahead không tiêu thụ ký tự (zero-width).
Ví dụ: Chuỗi KHÔNG bắt đầu bằng 1-2 chữ số 2 theo sau là 5
Pattern: ^(?!2{1,2}5).*
^— đầu chuỗi.(?!2{1,2}5)— negative lookahead: không được là 1 hoặc 2 chữ số2rồi đến5..*— khớp phần còn lại.
import re
foo1 = '2249678'
foo2 = '2259678'
print(re.findall(r'^(?!2{1,2}5).*', foo1)) # ['2249678']
print(re.findall(r'^(?!2{1,2}5).*', foo2)) # []
Các loại Lookaround
| Tên | Cú pháp | Ý nghĩa |
|---|---|---|
| Positive Lookahead | (?=...) | Phải khớp ... phía trước |
| Negative Lookahead | (?!...) | Không được khớp ... phía trước |
| Positive Lookbehind | (?<=...) | Phải khớp ... phía sau |
| Negative Lookbehind | (? | Không được khớp ... phía sau |