Nhóm phụ python

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
8

Ví 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

  1. 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
  2. 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
    4
  3. 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
    5

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óm

Chú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

  1. Để khớp với một từ HOA
  2. Để 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

  1. Mẫu để khớp với chữ hoa [PINEAPPLE]
  2. 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

  • 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 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 hoa
  • Sau đó, ký tự phụ
    # Extract first group
    print[result.group[1]]
    
    # Extract second group
    print[result.group[2]]
    
    # Target string
    print[result.group[0]]
    0 chỉ ra 1 hoặc nhiều lần xuất hiện của một chữ cái viết hoa

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ự
    # Extract first group
    print[result.group[1]]
    
    # Extract second group
    print[result.group[2]]
    
    # Target string
    print[result.group[0]]
    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

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óm

Ghi 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
  • # Extract first group
    print[result.group[1]]
    
    # Extract second group
    print[result.group[2]]
    
    # Target string
    print[result.group[0]]
    6 chỉ ra một ranh giới từ

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 PINEAPPLE

Tô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 20

Tiế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ớp

Phươ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
7

Vì 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ố 8

Vì 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
3

Trí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

Chủ Đề