Trong bài viết này, sẽ tìm hiểu cách nắm bắt các nhóm regex trong Python. Bằng cách chụp các nhóm, chúng tôi có thể khớp một số mẫu riêng biệt bên trong cùng một chuỗi mục tiêu
Mục lục
Nhóm trong Regex là gì?
Nhóm là một phần của mẫu biểu thức chính quy được đặt trong dấu ngoặc đơn
import re
target_string = "The price of PINEAPPLE ice cream is 20"
# two groups enclosed in separate [ and ] bracket
result = re.search[r"[\b[A-Z]+\b].+[\b\d+]", target_string]
# Extract matching values of all groups
print[result.groups[]]
# Output ['PINEAPPLE', '20']
# Extract match value of group 1
print[result.group[1]]
# Output 'PINEAPPLE'
# Extract match value of group 2
print[result.group[2]]
# Output 20
6 siêu ký tự. Chúng tôi tạo một nhóm bằng cách đặt mẫu biểu thức chính quy bên trong tập hợp các dấu ngoặc đơn import re
target_string = "The price of PINEAPPLE ice cream is 20"
# two groups enclosed in separate [ and ] bracket
result = re.search[r"[\b[A-Z]+\b].+[\b\d+]", target_string]
# Extract matching values of all groups
print[result.groups[]]
# Output ['PINEAPPLE', '20']
# Extract match value of group 1
print[result.group[1]]
# Output 'PINEAPPLE'
# Extract match value of group 2
print[result.group[2]]
# Output 20
7 và import re
target_string = "The price of PINEAPPLE ice cream is 20"
# two groups enclosed in separate [ and ] bracket
result = re.search[r"[\b[A-Z]+\b].+[\b\d+]", target_string]
# Extract matching values of all groups
print[result.groups[]]
# Output ['PINEAPPLE', '20']
# Extract match value of group 1
print[result.group[1]]
# Output 'PINEAPPLE'
# Extract match value of group 2
print[result.group[2]]
# Output 20
8. Ví dụ: biểu thức chính quy import re
target_string = "The price of PINEAPPLE ice cream is 20"
# two groups enclosed in separate [ and ] bracket
result = re.search[r"[\b[A-Z]+\b].+[\b\d+]", target_string]
# Extract matching values of all groups
print[result.groups[]]
# Output ['PINEAPPLE', '20']
# Extract match value of group 1
print[result.group[1]]
# Output 'PINEAPPLE'
# Extract match value of group 2
print[result.group[2]]
# Output 20
9 tạo một nhóm duy nhất chứa các chữ cái 'c', 'a' và 't'Ví dụ, trong trường hợp thực tế, bạn muốn nắm bắt email và số điện thoại, Vì vậy, bạn nên viết hai nhóm, nhóm đầu tiên sẽ tìm kiếm email và nhóm thứ hai sẽ tìm kiếm số điện thoại
Ngoài ra, chụp nhóm là một cách để coi nhiều ký tự là một đơn vị. Chúng được tạo bằng cách đặt các ký tự được nhóm bên trong một bộ dấu ngoặc đơn
import re
target_string = "The price of PINEAPPLE ice cream is 20"
# two groups enclosed in separate [ and ] bracket
result = re.search[r"[\b[A-Z]+\b].+[\b\d+]", target_string]
# Extract matching values of all groups
print[result.groups[]]
# Output ['PINEAPPLE', '20']
# Extract match value of group 1
print[result.group[1]]
# Output 'PINEAPPLE'
# Extract match value of group 2
print[result.group[2]]
# Output 20
7, import re
target_string = "The price of PINEAPPLE ice cream is 20"
# two groups enclosed in separate [ and ] bracket
result = re.search[r"[\b[A-Z]+\b].+[\b\d+]", target_string]
# Extract matching values of all groups
print[result.groups[]]
# Output ['PINEAPPLE', '20']
# Extract match value of group 1
print[result.group[1]]
# Output 'PINEAPPLE'
# Extract match value of group 2
print[result.group[2]]
# Output 20
8Ví dụ: Trong biểu thức,
import re
target_string = "The price of PINEAPPLE ice cream is 20"
# two groups enclosed in separate [ and ] bracket
result = re.search[r"[\b[A-Z]+\b].+[\b\d+]", target_string]
# Extract matching values of all groups
print[result.groups[]]
# Output ['PINEAPPLE', '20']
# Extract match value of group 1
print[result.group[1]]
# Output 'PINEAPPLE'
# Extract match value of group 2
print[result.group[2]]
# Output 20
2, có ba nhóm như vậy
2import re target_string = "The price of PINEAPPLE ice cream is 20" # two groups enclosed in separate [ and ] bracket result = re.search[r"[\b[A-Z]+\b].+[\b\d+]", target_string] # Extract matching values of all groups print[result.groups[]] # Output ['PINEAPPLE', '20'] # Extract match value of group 1 print[result.group[1]] # Output 'PINEAPPLE' # Extract match value of group 2 print[result.group[2]] # Output 20
4import re target_string = "The price of PINEAPPLE ice cream is 20" # two groups enclosed in separate [ and ] bracket result = re.search[r"[\b[A-Z]+\b].+[\b\d+]", target_string] # Extract matching values of all groups print[result.groups[]] # Output ['PINEAPPLE', '20'] # Extract match value of group 1 print[result.group[1]] # Output 'PINEAPPLE' # Extract match value of group 2 print[result.group[2]] # Output 20
5import re target_string = "The price of PINEAPPLE ice cream is 20" # two groups enclosed in separate [ and ] bracket result = re.search[r"[\b[A-Z]+\b].+[\b\d+]", target_string] # Extract matching values of all groups print[result.groups[]] # Output ['PINEAPPLE', '20'] # Extract match value of group 1 print[result.group[1]] # Output 'PINEAPPLE' # Extract match value of group 2 print[result.group[2]] # Output 20
Chúng tôi có thể chỉ định bao nhiêu nhóm tùy ý. Mỗi mẫu phụ bên trong một cặp dấu ngoặc đơn sẽ được ghi lại dưới dạng một nhóm. Các nhóm chụp được đánh số bằng cách đếm các dấu ngoặc đơn mở của chúng từ trái sang phải
Nhóm chụp là một tính năng tiện dụng của khớp biểu thức chính quy cho phép chúng ta truy vấn đối tượng Match để tìm ra phần của chuỗi khớp với một phần cụ thể của biểu thức chính quy
Bất cứ điều gì bạn có trong ngoặc đơn
import re
target_string = "The price of PINEAPPLE ice cream is 20"
# two groups enclosed in separate [ and ] bracket
result = re.search[r"[\b[A-Z]+\b].+[\b\d+]", target_string]
# Extract matching values of all groups
print[result.groups[]]
# Output ['PINEAPPLE', '20']
# Extract match value of group 1
print[result.group[1]]
# Output 'PINEAPPLE'
# Extract match value of group 2
print[result.group[2]]
# Output 20
6 sẽ là một nhóm chụp. sử dụng phương thức import re
target_string = "The price of PINEAPPLE ice cream is 20"
# two groups enclosed in separate [ and ] bracket
result = re.search[r"[\b[A-Z]+\b].+[\b\d+]", target_string]
# Extract matching values of all groups
print[result.groups[]]
# Output ['PINEAPPLE', '20']
# Extract match value of group 1
print[result.group[1]]
# Output 'PINEAPPLE'
# Extract match value of group 2
print[result.group[2]]
# Output 20
7 của đối tượng Match regex, chúng ta có thể trích xuất giá trị khớp của từng nhómChúng ta sẽ xem cách chụp một nhóm cũng như nhiều nhóm
Ví dụ để chụp nhiều nhóm
Giả sử bạn có chuỗi sau
target_string = "The price of PINEAPPLE ice cream is 20"
Và, bạn muốn khớp hai nhóm biểu thức chính quy sau bên trong một chuỗi
- Để khớp với một từ HOA
- Để phù hợp với một số
Để trích xuất chữ hoa và số từ chuỗi mục tiêu, trước tiên chúng ta phải viết hai mẫu biểu thức chính quy
- Mẫu để khớp với chữ hoa [PINEAPPLE]
- Mẫu khớp số [20]
Mẫu nhóm đầu tiên để tìm kiếm một từ viết hoa.
import re
target_string = "The price of PINEAPPLE ice cream is 20"
# two groups enclosed in separate [ and ] bracket
result = re.search[r"[\b[A-Z]+\b].+[\b\d+]", target_string]
# Extract matching values of all groups
print[result.groups[]]
# Output ['PINEAPPLE', '20']
# Extract match value of group 1
print[result.group[1]]
# Output 'PINEAPPLE'
# Extract match value of group 2
print[result.group[2]]
# Output 20
8
9 là lớp ký tự. Nó có nghĩa là chỉ ghép bất kỳ chữ cái nào từ chữ hoa A đến chữ Z viết hoaimport re target_string = "The price of PINEAPPLE ice cream is 20" # two groups enclosed in separate [ and ] bracket result = re.search[r"[\b[A-Z]+\b].+[\b\d+]", target_string] # Extract matching values of all groups print[result.groups[]] # Output ['PINEAPPLE', '20'] # Extract match value of group 1 print[result.group[1]] # Output 'PINEAPPLE' # Extract match value of group 2 print[result.group[2]] # Output 20
- Sau đó, ký tự phụ
0 chỉ ra 1 hoặc nhiều lần xuất hiện của một chữ cái viết hoa# Extract first group print[result.group[1]] # Extract second group print[result.group[2]] # Target string print[result.group[0]]
Mẫu nhóm thứ hai để tìm kiếm giá.
# Extract first group
print[result.group[1]]
# Extract second group
print[result.group[2]]
# Target string
print[result.group[0]]
1- ___82 có nghĩa là khớp với bất kỳ chữ số nào từ 0 đến 9 trong một chuỗi mục tiêu
- Sau đó, siêu ký tự
0 cho biết số có thể chứa tối thiểu 1 hoặc tối đa bất kỳ số chữ số nào# Extract first group print[result.group[1]] # Extract second group print[result.group[2]] # Target string print[result.group[0]]
Trích xuất các giá trị nhóm phù hợp
Cuối cùng, chúng ta có thể sử dụng phương thức nhóm[] và nhóm[] của đối tượng khớp để nhận các giá trị khớp
Bây giờ hãy chuyển sang ví dụ
Ví dụ
import re
target_string = "The price of PINEAPPLE ice cream is 20"
# two groups enclosed in separate [ and ] bracket
result = re.search[r"[\b[A-Z]+\b].+[\b\d+]", target_string]
# Extract matching values of all groups
print[result.groups[]]
# Output ['PINEAPPLE', '20']
# Extract match value of group 1
print[result.group[1]]
# Output 'PINEAPPLE'
# Extract match value of group 2
print[result.group[2]]
# Output 20
Hãy hiểu ví dụ trên
Trước hết, tôi đã sử dụng một chuỗi thô để chỉ định mẫu biểu thức chính quy. Như bạn có thể đã biết, dấu gạch chéo ngược có ý nghĩa đặc biệt trong một số trường hợp vì nó có thể biểu thị ký tự thoát hoặc chuỗi thoát để tránh việc chúng ta phải sử dụng chuỗi thô
Bây giờ chúng ta hãy xem xét kỹ hơn cú pháp biểu thức chính quy để xác định và tách biệt hai mẫu mà chúng ta đang tìm cách so khớp. Chúng ta cần hai điều
Đầu tiên, chúng ta cần đặt mỗi mẫu trong hai mẫu bên trong một cặp dấu ngoặc đơn. Vì vậy,
# Extract first group
print[result.group[1]]
# Extract second group
print[result.group[2]]
# Target string
print[result.group[0]]
4 là nhóm đầu tiên và # Extract first group
print[result.group[1]]
# Extract second group
print[result.group[2]]
# Target string
print[result.group[0]]
5 là nhóm thứ hai ở giữa dấu ngoặc đơn. Do đó mỗi cặp dấu ngoặc đơn là một nhómGhi chú
- Các dấu ngoặc đơn không phải là một phần của mẫu. Nó chỉ ra một nhóm
6 chỉ ra một ranh giới từ# Extract first group print[result.group[1]] # Extract second group print[result.group[2]] # Target string print[result.group[0]]
Thứ hai, chúng ta cần xem xét bối cảnh rộng lớn hơn mà các nhóm này cư trú. Điều này có nghĩa là chúng tôi cũng quan tâm đến vị trí của từng nhóm này bên trong toàn bộ chuỗi mục tiêu và đó là lý do tại sao chúng tôi cần cung cấp ngữ cảnh hoặc đường viền cho từng nhóm
Tiếp theo, tôi đã thêm
# Extract first group
print[result.group[1]]
# Extract second group
print[result.group[2]]
# Target string
print[result.group[0]]
7 vào đầu mỗi nhóm. dấu chấm đại diện cho bất kỳ ký tự nào ngoại trừ một dòng mới và dấu cộng có nghĩa là mẫu trước đó đang lặp lại một hoặc nhiều lần. Cú pháp này có nghĩa là trước nhóm, chúng ta có một loạt các ký tự mà chúng ta có thể bỏ qua, chỉ lấy các từ viết hoa theo sau là ranh giới từ [khoảng trắng]. nó sẽ khớp với PINEAPPLETôi cũng đã thêm
# Extract first group
print[result.group[1]]
# Extract second group
print[result.group[2]]
# Target string
print[result.group[0]]
7 vào đầu mẫu thứ hai, có nghĩa là trước nhóm thứ hai, chúng tôi có một loạt các ký tự mà chúng tôi có thể bỏ qua, chỉ lấy các số theo sau bởi một ranh giới. nó sẽ khớp với 20Tiếp theo, chúng tôi đã chuyển cả hai mẫu sang phương pháp
# Extract first group
print[result.group[1]]
# Extract second group
print[result.group[2]]
# Target string
print[result.group[0]]
9 để tìm kết quả khớpPhương thức của nhóm []
Cuối cùng, sử dụng phương thức groups[] của đối tượng Match, chúng ta có thể trích xuất tất cả các kết quả nhóm cùng một lúc. Nó cung cấp tất cả các trận đấu ở định dạng tuple
Truy cập riêng từng kết quả nhóm
Chúng ta có thể sử dụng phương thức group[] để trích xuất riêng từng kết quả của nhóm bằng cách chỉ định chỉ mục nhóm ở giữa các dấu ngoặc đơn. Các nhóm chụp được đánh số bằng cách đếm các dấu ngoặc đơn mở của chúng từ trái sang phải. Trong trường hợp của chúng tôi, chúng tôi đã sử dụng hai nhóm
Xin lưu ý rằng không giống như lập chỉ mục chuỗi, luôn bắt đầu từ 0, đánh số nhóm luôn bắt đầu từ 1
Nhóm có số 0 luôn là chuỗi mục tiêu. Nếu bạn gọi Phương thức
import re
target_string = "The price of PINEAPPLE ice cream is 20"
# two groups enclosed in separate [ and ] bracket
result = re.search[r"[\b[A-Z]+\b].+[\b\d+]", target_string]
# Extract matching values of all groups
print[result.groups[]]
# Output ['PINEAPPLE', '20']
# Extract match value of group 1
print[result.group[1]]
# Output 'PINEAPPLE'
# Extract match value of group 2
print[result.group[2]]
# Output 20
90 mà không có đối số nào hoặc có đối số là 0, bạn sẽ nhận được toàn bộ chuỗi mục tiêuĐể có quyền truy cập vào văn bản phù hợp với từng nhóm biểu thức chính quy, hãy chuyển số của nhóm cho phương thức
import re
target_string = "The price of PINEAPPLE ice cream is 20"
# two groups enclosed in separate [ and ] bracket
result = re.search[r"[\b[A-Z]+\b].+[\b\d+]", target_string]
# Extract matching values of all groups
print[result.groups[]]
# Output ['PINEAPPLE', '20']
# Extract match value of group 1
print[result.group[1]]
# Output 'PINEAPPLE'
# Extract match value of group 2
print[result.group[2]]
# Output 20
7Vì vậy, nhóm đầu tiên sẽ là một nhóm gồm 1. Nhóm thứ hai sẽ là nhóm 2 người, v.v.
Ví dụ
________số 8Vì vậy, đây là cách đơn giản để truy cập từng nhóm miễn là các mẫu phù hợp
Nhóm chụp Regex nhiều lần
Trong các ví dụ trước, chúng tôi đã sử dụng phương pháp tìm kiếm. Nó sẽ chỉ trả lại trận đấu đầu tiên cho mỗi nhóm. Nhưng điều gì sẽ xảy ra nếu một chuỗi chứa nhiều lần xuất hiện của một nhóm biểu thức chính quy và bạn muốn trích xuất tất cả các kết quả khớp
Trong phần này, chúng ta sẽ tìm hiểu cách nắm bắt tất cả các kết quả khớp với một nhóm biểu thức chính quy. Để nắm bắt tất cả các kết quả khớp với một nhóm regex, chúng ta cần sử dụng phương thức
Phương thức finditer[] tìm tất cả các kết quả khớp và trả về một trình vòng lặp mang lại các đối tượng khớp khớp với mẫu biểu thức chính quy. Tiếp theo, chúng ta có thể lặp lại từng đối tượng Match và trích xuất giá trị của nó
Ghi chú. Không sử dụng phương thức findall[] vì nó trả về một danh sách, không thể áp dụng phương thức group[]. Nếu bạn cố gắng áp dụng nó cho phương thức findall, bạn sẽ nhận được AttributeError. đối tượng 'danh sách' không có thuộc tính 'nhóm. ’
Vì vậy, hãy luôn sử dụng công cụ tìm nếu bạn muốn nắm bắt tất cả các kết quả phù hợp với nhóm
Ví dụ
import re
target_string = "The price of PINEAPPLE ice cream is 20"
# two groups enclosed in separate [ and ] bracket
result = re.search[r"[\b[A-Z]+\b].+[\b\d+]", target_string]
# Extract matching values of all groups
print[result.groups[]]
# Output ['PINEAPPLE', '20']
# Extract match value of group 1
print[result.group[1]]
# Output 'PINEAPPLE'
# Extract match value of group 2
print[result.group[2]]
# Output 20
9đầu ra
import re
target_string = "The price of PINEAPPLE ice cream is 20"
# two groups enclosed in separate [ and ] bracket
result = re.search[r"[\b[A-Z]+\b].+[\b\d+]", target_string]
# Extract matching values of all groups
print[result.groups[]]
# Output ['PINEAPPLE', '20']
# Extract match value of group 1
print[result.group[1]]
# Output 'PINEAPPLE'
# Extract match value of group 2
print[result.group[2]]
# Output 20
3Trích xuất phạm vi của các nhóm phù hợp
Một điều nữa mà bạn có thể làm với phương thức
import re
target_string = "The price of PINEAPPLE ice cream is 20"
# two groups enclosed in separate [ and ] bracket
result = re.search[r"[\b[A-Z]+\b].+[\b\d+]", target_string]
# Extract matching values of all groups
print[result.groups[]]
# Output ['PINEAPPLE', '20']
# Extract match value of group 1
print[result.group[1]]
# Output 'PINEAPPLE'
# Extract match value of group 2
print[result.group[2]]
# Output 20
90 là trả về các kết quả trùng khớp dưới dạng một bộ bằng cách chỉ định các số nhóm được liên kết ở giữa các dấu ngoặc đơn của phương thức import re
target_string = "The price of PINEAPPLE ice cream is 20"
# two groups enclosed in separate [ and ] bracket
result = re.search[r"[\b[A-Z]+\b].+[\b\d+]", target_string]
# Extract matching values of all groups
print[result.groups[]]
# Output ['PINEAPPLE', '20']
# Extract match value of group 1
print[result.group[1]]
# Output 'PINEAPPLE'
# Extract match value of group 2
print[result.group[2]]
# Output 20
90. Điều này hữu ích khi chúng tôi muốn trích xuất phạm vi của các nhóm