Trong Hướng dẫn Python này, chúng ta sẽ tìm hiểu về Biểu thức chính quy [hoặc RE, regex] trong Python. Biểu thức chính quy là một ngôn ngữ mạnh mẽ để so khớp các mẫu văn bản
Patrick Loeber · · · · · Ngày 19 tháng 4 năm 2020 · 31 phút đọc
Khóa học về sự cố PythonBiểu thức chính quy [RE, hoặc biểu thức chính quy hoặc mẫu biểu thức chính quy] là một ngôn ngữ mạnh mẽ để so khớp các mẫu văn bản. Ví dụ mẫu có thể cho các tìm kiếm là, e. g. , Địa chỉ email hoặc tên miền. Bài viết này giới thiệu cơ bản về biểu thức chính quy và cho biết cách biểu thức chính quy hoạt động trong Python. Nó sẽ bao gồm tất cả các khái niệm cần thiết
1] Các phương thức tìm kiếm đối sánh
2] Các phương thức trên đối tượng khớp
3] Ký tự meta
4] More special sequences
5] Sets
6] Quantifier
7] Conditions
8] Grouping
9] Examples
10] Modification
11] Compilation flags
Các biểu thức chính quy bên trong Python được cung cấp thông qua mô-đun `re
import re
Sử dụng biểu thức chính quy, bạn chỉ định các quy tắc cho tập hợp các chuỗi có thể mà bạn muốn khớp. Thông thường, trước tiên chúng tôi xác định mẫu mà chúng tôi muốn tìm kiếm và sử dụng
Hello
\tHello
2 trên đó. Theo mặc định, mẫu của chúng tôi phân biệt chữ hoa chữ thườngtest_string = '123abc456789abc123ABC'
pattern = re.compile[r'abc']
Ghi chú. Nên sử dụng các chuỗi thô để tìm kiếm
## Use raw strings for the search pattern
a = '\tHello'
b = r'\tHello'
print[a]
print[b]
Hello
\tHello
Thực hiện khớp với các đối tượng được biên dịch
Khi đã có mẫu của mình, chúng ta có thể tìm kiếm mẫu này trong văn bản/chuỗi mà chúng ta muốn tra cứu
- trận đấu[]. Xác định xem RE có khớp ở đầu chuỗi không
- Tìm kiếm[]. Quét qua một chuỗi, tìm kiếm bất kỳ vị trí nào mà RE này khớp
- tìm tất cả []. Tìm tất cả các chuỗi con nơi RE khớp và trả về chúng dưới dạng danh sách
- công cụ tìm[]. Tìm tất cả các chuỗi con nơi RE khớp và trả về chúng dưới dạng một trình vòng lặp
phương pháp sửa đổi
Chúng tôi sẽ đề cập đến các phương pháp này sau
- tách ra[]. Trả về một danh sách trong đó chuỗi đã được tách ra ở mỗi trận đấu
- phụ[]. Thay thế một hoặc nhiều kết quả khớp bằng một chuỗi
# finditer[]
my_string = 'abc123ABC123abc'
pattern = re.compile[r'123']
matches = pattern.finditer[my_string]
for match in matches:
print[match]
print[match.span[], match.start[], match.end[]]
print[match.group[]] # returns the string
print[]
# findall[]
pattern = re.compile[r'123']
matches = pattern.findall[my_string]
for match in matches:
print[match]
print[]
# match
match = pattern.match[my_string]
print[match]
pattern = re.compile[r'abc']
match = pattern.match[my_string]
print[match]
print[]
# search
match = pattern.search[my_string]
print[match]
[0, 3] 0 3
123
[15, 18] 15 18
123
123
123
None
Ghi chú. Các phương thức cũng có thể được sử dụng trực tiếp trên mô-đun
Hello
\tHello
3. Nó không tạo ra nhiều sự khác biệt, nhưng một số người thích biên dịch trước rõ ràng và ràng buộc mẫu với một biến có thể sử dụng lại. [Xem https. // stackoverflow. com/câu hỏi/452104/is-it-worth-using-pythons-re-biên dịch]________số 8
Các phương thức trên một đối tượng Match
- tập đoàn[]. Trả về chuỗi khớp với RE
- bắt đầu[]. Trả lại vị trí bắt đầu của trận đấu
- chấm dứt[]. Trả lại vị trí kết thúc trận đấu
- nhịp[]. Trả về một bộ chứa các vị trí [bắt đầu, kết thúc] của trận đấu
Hello
\tHello
0 Hello
\tHello
1Ký tự meta
Siêu ký tự là ký tự có ý nghĩa đặc biệt.
Tất cả ký tự meta. . ^ $ * + ? . [ ]
Các ký tự meta cần phải được thoát [với ] nếu chúng tôi thực sự muốn tìm kiếm ký tự.
- Bất kỳ ký tự nào [ngoại trừ ký tự xuống dòng] "he. o"
- ^ Bắt đầu bằng "^xin chào"
- \$ Kết thúc bằng "thế giới\$"
- * Không hoặc nhiều lần xuất hiện "aix*"
- + Một hoặc nhiều lần xuất hiện "aix+"
- { } Chính xác số lần xuất hiện đã chỉ định "al{2}"
- [] Một tập hợp các ký tự "[a-m]"
- \ Báo hiệu một chuỗi đặc biệt [cũng có thể được sử dụng để thoát khỏi các ký tự đặc biệt] "\d"
- Hoặc hoặc "rơi. ở lại"
- [ ] Chụp và nhóm
test_string = '123abc456789abc123ABC'
pattern = re.compile[r'abc']
0test_string = '123abc456789abc123ABC'
pattern = re.compile[r'abc']
1Thêm siêu ký tự / Trình tự đặc biệt
Một chuỗi đặc biệt là \ theo sau bởi một trong các ký tự trong danh sách bên dưới và có ý nghĩa đặc biệt