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

Metacharacters (Ký tự đặc biệt) bên trong Character Class trong Python Regex

Trong Regular Expression, hầu hết ký tự khớp chính với chính nó. Nhưng Metacharacters (ký tự đặc biệt) có ý nghĩa đặc biệt. Tuy nhiên, bên trong Character Class [...], hầu hết metacharacters mất tác dụng đặc biệt và trở thành ký tự thường.

Danh sách Metacharacters tổng quát

. ^ $ * + ? { } [ ] \ | ( )

Bên trong Character Class [...]

Ký tựÝ nghĩa bên trong [... ]
]Kết thúc class (nếu không phải ký tự đầu). Phải escape \] để khớp ']'.
\Escape character. \\ khớp '\', \] khớp ']'.
-Tạo range (ví dụ a-z). Nếu ở đầu/cuối hoặc escape \- thì khớp '-'.
^Chỉ có tác dụng phủ định nếu là ký tự đầu tiên sau [. Vị trí khác: khớp '^' thường.
Các ký tự khác (.$*+?{}()|)Mất tác dụng đặc biệt, khớp chính với chính nó.

Ví dụ minh họa

import re

# [$] khớp ký tự '$' (không phải end-of-string)
print(re.findall(r'[$]', "Price: $100"))  # ['$']

# [.] khớp dấu chấm '.'
print(re.findall(r'[.]', "a.b.c"))  # ['.', '.']

# [()] khớp ngoặc
print(re.findall(r'[()]', "(a) + (b)"))  # ['(', ')', '(', ')']

# [^] ở đầu = phủ định
print(re.findall(r'[^0-9]', "abc123"))  # ['a', 'b', 'c']

# [a-z-] khớp a-z và '-'
print(re.findall(r'[a-z-]', "a-b-c"))  # ['a', '-', 'b', '-', 'c']

Escape bên trong Class

Chỉ cần escape ], \, - (nếu không ở đầu/cuối), ^ (nếu ở đầu).

r'[\]]'        # Khớp ']'
r'[\\]'        # Khớp '\'
r'[\-a-z]'     # Khớp '-' và a-z (dấu - ở đầu)
r'[a-z\-]'     # Khớp a-z và '-' (dấu - ở cuối)
r'[\^abc]'     # Khớp '^', 'a', 'b', 'c'

Tóm tắt

Bên trong [...], regex engine "tắt" hầu hết metacharacters. Chỉ ], \, -, ^ (vị trí đầu) giữ ý nghĩa đặc biệt. Điều này làm cho character class an toàn và dễ dự đoán.