Python RegEx: re.match(), re.search(), re.findall() với ví dụ

Biểu thức chính quy trong Python?

A Biểu thức chính quy (RE) trong ngôn ngữ lập trình là một chuỗi văn bản đặc biệt được sử dụng để mô tả mẫu tìm kiếm. Nó cực kỳ hữu ích để trích xuất thông tin từ văn bản như mã, tệp, nhật ký, bảng tính hoặc thậm chí cả tài liệu.

Trong khi sử dụng Python biểu thức chính quy điều đầu tiên cần nhận ra là mọi thứ về cơ bản đều là một ký tự và chúng ta đang viết các mẫu để khớp với một chuỗi ký tự cụ thể còn được gọi là chuỗi. Ascii hoặc chữ cái Latinh là những chữ cái có trên bàn phím của bạn và Unicode được sử dụng để khớp với văn bản nước ngoài. Nó bao gồm các chữ số, dấu câu và tất cả các ký tự đặc biệt như $#@!%, v.v.

Ví dụ, một Python biểu thức chính quy có thể yêu cầu chương trình tìm kiếm văn bản cụ thể từ chuỗi và sau đó in ra kết quả tương ứng. Biểu thức có thể bao gồm

  • So khớp văn bản
  • Lặp lại
  • Chi nhánh
  • Thành phần mẫu, v.v.

Biểu thức chính quy hoặc RegEx trong Python được ký hiệu là RE (RE, biểu thức chính quy hoặc mẫu biểu thức chính quy) được nhập thông qua mô-đun lại. Python hỗ trợ biểu thức chính quy thông qua các thư viện. RegEx trong Python hỗ trợ nhiều thứ khác nhau như Công cụ sửa đổi, Mã định danh và Ký tự khoảng trắng.

Định danh Bổ ngữ Ký tự khoảng trắng Cần thoát hiểm
\d= bất kỳ số nào (một chữ số) \d đại diện cho một chữ số. Ví dụ: \d{1,5} nó sẽ khai báo chữ số trong khoảng 1,5 như 424,444,545, v.v. \n = dòng mới . + * ? [] $ ^ () {} | \
\D= bất cứ thứ gì ngoại trừ số (không phải chữ số) + = khớp 1 hoặc nhiều hơn \s= dấu cách
\s = khoảng trắng
(tab, dấu cách, dòng mới, v.v.)
? = khớp 0 hoặc 1 \t =tab
\S= bất cứ thứ gì ngoại trừ khoảng trắng * = 0 trở lên \e = trốn thoát
\w = các chữ cái ( Khớp ký tự chữ và số, bao gồm cả “_”) $ khớp với phần cuối của chuỗi \r = trả lại vận chuyển
\W =bất cứ thứ gì ngoại trừ các chữ cái ( Khớp với ký tự không phải chữ và số ngoại trừ “_”) ^ khớp phần đầu của một chuỗi \f= nguồn cấp dữ liệu biểu mẫu
. = bất cứ thứ gì ngoại trừ các chữ cái (dấu chấm) | khớp với hoặc x/y ------
\b = bất kỳ ký tự nào ngoại trừ dòng mới [] = phạm vi hoặc “phương sai” ------
\. {x} = số lượng mã trước đó ------

Cú pháp biểu thức chính quy(RE)

import re
  • mô-đun “re” đi kèm với Python chủ yếu được sử dụng để tìm kiếm và thao tác chuỗi
  • Cũng được sử dụng thường xuyên cho trang web “Cạo” (trích xuất lượng lớn dữ liệu từ các trang web)

Chúng ta sẽ bắt đầu hướng dẫn biểu thức bằng bài tập đơn giản này bằng cách sử dụng các biểu thức (w+) và (^).

Ví dụ về biểu thức w+ và ^

  • “^”: Biểu thức này khớp với phần đầu của một chuỗi
  • “w+“: Biểu thức này khớp với ký tự chữ và số trong chuỗi

Ở đây chúng ta sẽ thấy một Python RegEx Ví dụ về cách chúng ta có thể sử dụng biểu thức w+ và ^ trong mã của mình. Chúng tôi đề cập đến hàm re.findall() trong Python, ở phần sau của hướng dẫn này nhưng trong lúc này chúng ta chỉ tập trung vào biểu thức \w+ và \^.

Ví dụ: đối với chuỗi “guru99, giáo dục là niềm vui” nếu chúng ta thực thi mã với w+ và^, nó sẽ cho kết quả là “guru99”.

Ví dụ về biểu thức w+ và ^

import re
xx = "guru99,education is fun"
r1 = re.findall(r"^\w+",xx)
print(r1)

Hãy nhớ rằng, nếu bạn xóa dấu + khỏi w+, kết quả đầu ra sẽ thay đổi và nó sẽ chỉ cung cấp ký tự đầu tiên của chữ cái đầu tiên, tức là [g]

Ví dụ về biểu thức \s trong hàm re.split

  • “s”: Biểu thức này được sử dụng để tạo khoảng trắng trong chuỗi

Để hiểu RegEx này như thế nào trong Python hoạt động, chúng ta bắt đầu với một cách đơn giản Python RegEx Ví dụ về hàm phân tách. Trong ví dụ, chúng tôi đã phân tách từng từ bằng cách sử dụng hàm “re.split” và đồng thời chúng tôi đã sử dụng biểu thức \s cho phép phân tích từng từ trong chuỗi một cách riêng biệt.

biểu thức \s trong hàm re.split

Khi bạn thực thi mã này, nó sẽ cung cấp cho bạn đầu ra ['chúng tôi', 'là', 'tách', 'the', 'từ'].

Bây giờ, hãy xem điều gì xảy ra nếu bạn xóa “\” khỏi s. Không có bảng chữ cái 's' ở đầu ra, điều này là do chúng tôi đã xóa '\' khỏi chuỗi và nó đánh giá “s” là một ký tự thông thường và do đó phân tách các từ ở bất cứ nơi nào nó tìm thấy “s” trong chuỗi.

biểu thức \s trong hàm re.split

Tương tự, còn có hàng loạt các sản phẩm khác Python biểu thức chính quy mà bạn có thể sử dụng theo nhiều cách khác nhau trong Python như \d,\D,$,\.,\b, v.v.

Đây là mã hoàn chỉnh

import re
xx = "guru99,education is fun"
r1 = re.findall(r"^\w+", xx)
print((re.split(r'\s','we are splitting the words')))
print((re.split(r's','split the words')))

Tiếp theo, chúng ta sẽ xem các loại phương thức được sử dụng với biểu thức chính quy trong Python.

Sử dụng các phương thức biểu thức chính quy

Gói “re” cung cấp một số phương thức để thực sự thực hiện các truy vấn trên chuỗi đầu vào. Chúng ta sẽ thấy các phương pháp tái Python:

  • re.match ()
  • nghiên cứu()
  • re.findall ()

Chú thích: Dựa trên các biểu thức chính quy, Python cung cấp hai hoạt động nguyên thủy khác nhau. Phương thức match chỉ kiểm tra sự trùng khớp ở đầu chuỗi trong khi search kiểm tra sự trùng khớp ở bất kỳ đâu trong chuỗi.

re.match ()

re.match () chức năng của re in Python sẽ tìm kiếm mẫu biểu thức chính quy và trả về lần xuất hiện đầu tiên. các Python Phương thức RegEx Match chỉ kiểm tra sự trùng khớp ở đầu chuỗi. Vì vậy, nếu tìm thấy kết quả khớp ở dòng đầu tiên, nó sẽ trả về đối tượng khớp. Nhưng nếu tìm thấy kết quả trùng khớp ở dòng khác, thì Python Hàm RegEx Match trả về giá trị rỗng.

Ví dụ, hãy xem xét đoạn mã sau đây Python hàm re.match(). Biểu thức “w+” và “\W” sẽ khớp với các từ bắt đầu bằng chữ 'g' và sau đó, bất kỳ từ nào không bắt đầu bằng 'g' sẽ không được xác định. Để kiểm tra sự trùng khớp của từng phần tử trong danh sách hoặc chuỗi, chúng ta chạy vòng lặp for trong phần này Python re.match() Ví dụ.

re.match ()

re.search(): Tìm mẫu trong văn bản

nghiên cứu() hàm sẽ tìm kiếm mẫu biểu thức chính quy và trả về lần xuất hiện đầu tiên. Không giống Python re.match(), nó sẽ kiểm tra tất cả các dòng của chuỗi đầu vào. các Python Hàm re.search() trả về một đối tượng khớp khi tìm thấy mẫu và trả về null nếu không tìm thấy mẫu

Làm cách nào để sử dụng tìm kiếm()?

Để sử dụng hàm search(), bạn cần nhập Python re module trước rồi mới thực thi mã. các Python Hàm re.search() lấy “mẫu” và “văn bản” để quét từ chuỗi chính của chúng ta

sử dụng tìm kiếm()

Ví dụ ở đây, chúng tôi tìm kiếm hai chuỗi ký tự “Kiểm thử phần mềm” “guru99”, trong chuỗi văn bản “Phần mềm Kiểm tra là niềm vui”. Đối với “thử nghiệm phần mềm”, chúng tôi đã tìm thấy kết quả khớp do đó nó trả về kết quả đầu ra của Python re.search() Ví dụ như “tìm thấy kết quả khớp”, trong khi đối với từ “guru99”, chúng tôi không thể tìm thấy trong chuỗi do đó nó trả về kết quả là “Không khớp”.

re.findall ()

findall () mô-đun được sử dụng để tìm kiếm “tất cả” lần xuất hiện khớp với một mẫu nhất định. Ngược lại, mô-đun search() sẽ chỉ trả về lần xuất hiện đầu tiên khớp với mẫu đã chỉ định. findall() sẽ lặp lại tất cả các dòng của tệp và sẽ trả về tất cả các kết quả khớp mẫu không chồng chéo trong một bước duy nhất.

Cách sử dụng re.findall() trong Python?

Ở đây chúng ta có một danh sách các địa chỉ email và chúng ta muốn lấy tất cả các địa chỉ email từ danh sách, chúng ta sử dụng phương thức re.findall() trong Python. Nó sẽ tìm thấy tất cả các địa chỉ email trong danh sách.

Sử dụng re.findall() trong Python

Đây là mã hoàn chỉnh cho Ví dụ về re.findall()

import re

list = ["guru99 get", "guru99 give", "guru Selenium"]
for element in list:
    z = re.match("(g\w+)\W(g\w+)", element)
if z:
    print((z.groups()))
    
patterns = ['software testing', 'guru99']
text = 'software testing is fun?'
for pattern in patterns:
    print('Looking for "%s" in "%s" ->' % (pattern, text), end=' ')
    if re.search(pattern, text):
        print('found a match!')
else:
    print('no match')
abc = 'guru99@google.com, careerguru99@hotmail.com, users@yahoomail.com'
emails = re.findall(r'[\w\.-]+@[\w\.-]+', abc)
for email in emails:
    print(email)

Python Flags

nhiều Python Phương thức Regex và hàm Regex nhận một đối số tùy chọn được gọi là Flags. Cờ này có thể sửa đổi ý nghĩa của Python Mẫu Regex. Để hiểu những điều này chúng ta sẽ xem một hoặc hai ví dụ về các Cờ này.

Các loại cờ khác nhau được sử dụng trong Python bao gồm

Cú pháp cho cờ Regex Cờ này có tác dụng gì
[re.M] Bắt đầu/kết thúc xem xét từng dòng
[re.I] Nó bỏ qua trường hợp
[re.S] Làm [ . ]
[re.U] Đặt { \w,\W,\b,\B} tuân theo quy tắc Unicode
[re.L] Đặt {\w,\W,\b,\B} theo dõi ngôn ngữ
[re.X] Cho phép bình luận trong Regex

Ví dụ về cờ re.M hoặc Multiline

Trong multiline, ký tự mẫu [^] khớp với ký tự đầu tiên của chuỗi và phần đầu của mỗi dòng (theo ngay sau mỗi dòng mới). Trong khi biểu thức “w” nhỏ được sử dụng để đánh dấu khoảng trắng bằng các ký tự. Khi bạn chạy mã, biến đầu tiên “k1” chỉ in ra ký tự 'g' cho từ guru99, trong khi khi bạn thêm cờ multiline, nó sẽ lấy ra các ký tự đầu tiên của tất cả các phần tử trong chuỗi.

Ví dụ về cờ re.M hoặc Multiline

Đây là mã

import re
xx = """guru99 
careerguru99	
selenium"""
k1 = re.findall(r"^\w", xx)
k2 = re.findall(r"^\w", xx, re.MULTILINE)
print(k1)
print(k2)
  • Chúng ta đã khai báo biến xx cho chuỗi ” guru99…. Careerguru99….selenium”
  • Chạy mã mà không sử dụng cờ nhiều dòng, nó chỉ cung cấp đầu ra 'g' từ các dòng
  • Chạy mã với cờ “multiline”, khi bạn in 'k2', nó cho kết quả là 'g', 'c' và 's'
  • Vì vậy, sự khác biệt chúng ta có thể thấy sau và trước khi thêm nhiều dòng trong ví dụ trên.

Tương tự như vậy, bạn cũng có thể sử dụng các Python các cờ như re.U (Unicode), re.L (Theo dõi ngôn ngữ), re.X (Cho phép nhận xét), v.v.

Python 2 Ví dụ

Các mã trên là Python 3 ví dụ, Nếu bạn muốn chạy vào Python 2 vui lòng xem xét đoạn mã sau.

# Example of w+ and ^ Expression
import re
xx = "guru99,education is fun"
r1 = re.findall(r"^\w+",xx)
print r1

# Example of \s expression in re.split function
import re
xx = "guru99,education is fun"
r1 = re.findall(r"^\w+", xx)
print (re.split(r'\s','we are splitting the words'))
print (re.split(r's','split the words'))

# Using re.findall for text
import re

list = ["guru99 get", "guru99 give", "guru Selenium"]
for element in list:
    z = re.match("(g\w+)\W(g\w+)", element)
if z:
    print(z.groups())
    
patterns = ['software testing', 'guru99']
text = 'software testing is fun?'
for pattern in patterns:
    print 'Looking for "%s" in "%s" ->' % (pattern, text),
    if re.search(pattern, text):
        print 'found a match!'
else:
    print 'no match'
abc = 'guru99@google.com, careerguru99@hotmail.com, users@yahoomail.com'
emails = re.findall(r'[\w\.-]+@[\w\.-]+', abc)
for email in emails:
    print email

# Example of re.M or Multiline Flags
import re
xx = """guru99 
careerguru99	
selenium"""
k1 = re.findall(r"^\w", xx)
k2 = re.findall(r"^\w", xx, re.MULTILINE)
print k1
print k2

Kiểm tra của bạn Python Hiểu biết

1. Phương pháp nào được sử dụng để tìm tất cả các lần xuất hiện của một mẫu trong một chuỗi?

  • nghiên cứu()
  • re.match ()
  • re.findall ()
  • chia lại()
re.findall() được sử dụng để tìm tất cả các lần xuất hiện của một mẫu trong một chuỗi.

2. Lớp ký tự \d biểu diễn cái gì trong biểu thức chính quy?

  • Bất kỳ chữ số nào (0-9)
  • Bất kỳ ký tự nào không phải chữ số
  • Bất kỳ ký tự khoảng trắng nào
  • Bất kỳ chữ cái hoặc số
\d biểu thị bất kỳ chữ số nào (0-9).

3. Bạn sẽ sử dụng hàm nào để chia chuỗi dựa trên khoảng trắng?

  • re.split(r'\s', chuỗi)
  • re.findall(r'\w+', chuỗi)
  • re.match(r'\s+', chuỗi)
  • re.split(r'\w+', chuỗi)
re.split(r'\s', string) chia chuỗi dựa trên khoảng trắng bằng cách sử dụng biểu thức \s.

4. Sự khác biệt chính giữa re.match() và re.search() là gì?

  • re.match() tìm kiếm một mẫu ở đầu chuỗi, trong khi re.search() tìm kiếm một mẫu ở bất kỳ vị trí nào trong chuỗi.
  • re.match() trả về tất cả các kết quả khớp, trong khi re.search() trả về kết quả khớp đầu tiên.
  • re.search() nhanh hơn re.match().
  • Cả hai chức năng đều hoạt động theo cùng một cách.
re.match() tìm kiếm một mẫu ở đầu chuỗi, trong khi re.search() tìm kiếm một mẫu ở bất kỳ vị trí nào trong chuỗi.

Tổng kết

Một biểu thức chính quy trong một ngôn ngữ lập trình là một chuỗi văn bản đặc biệt được sử dụng để mô tả mẫu tìm kiếm. Nó bao gồm các chữ số, dấu câu và tất cả các ký tự đặc biệt như $#@!%, v.v. Biểu thức có thể bao gồm cả ký tự chữ

  • So khớp văn bản
  • Lặp lại
  • Chi nhánh
  • Thành phần mẫu, v.v.

In Python, một biểu thức chính quy được ký hiệu là RE (RE, biểu thức chính quy hoặc mẫu biểu thức chính quy) được nhúng thông qua Python mô-đun lại.

  • mô-đun “re” đi kèm với Python chủ yếu được sử dụng để tìm kiếm và thao tác chuỗi
  • Cũng được sử dụng thường xuyên cho trang web “Scraping” (trích xuất lượng lớn dữ liệu từ các trang web)
  • Các phương thức biểu thức chính quy bao gồm re.match(),re.search()& re.findall()
  • Nền tảng khác Python Các phương thức thay thế RegEx là sub() và subn() được sử dụng để thay thế các chuỗi khớp trong re.
  • Python Flags nhiều Python Phương thức Regex và hàm Regex nhận một đối số tùy chọn được gọi là Flags
  • Cờ này có thể sửa đổi ý nghĩa của mẫu Regex đã cho
  • Thông báo sau Python các cờ được sử dụng trong Phương thức Regex là re.M, re.I, re.S, v.v.

Tìm hiểu thêm về PNV Xem tiếp