Python – Biểu thức chính quy

Định nghĩa 

Một biểu thức chính quy là một chuỗi đặc biệt của nhân vật giúp bạn kết hợp hoặc tìm chuỗi khác hoặc bộ dây, sử dụng một cú pháp đặc biệt được tổ chức tại một mô hình. Biểu thức chính quy được sử dụng rộng rãi trong thế giới UNIX.

Các mô-đun Python tái cung cấp hỗ trợ đầy đủ cho Perl giống như biểu thức thông thường bằng Python. Mô-đun re tăng lỗi re.error ngoại lệ nếu lỗi xảy ra khi biên dịch hoặc sử dụng biểu thức chính quy.

Chúng tôi sẽ đề cập đến hai hàm quan trọng, sẽ được sử dụng để xử lý các biểu thức chính quy. Nhưng một điều nhỏ trước tiên: Có nhiều ký tự khác nhau, sẽ có ý nghĩa đặc biệt khi chúng được sử dụng trong biểu thức chính quy. Để tránh bất kỳ sự nhầm lẫn nào khi xử lý các biểu thức chính quy, chúng tôi sẽ sử dụng Chuỗi thô làm r’expression ‘ .

Chức nằng về match

Hàm này cố gắng khớp mẫu RE thành chuỗi với các cờ tùy chọn .

Đây là cú pháp của hàm này:

re.match(pattern, string, flags=0)

Đây là mô tả của các tham số :

pattern : Đây là biểu thức chính quy được so khớp.

string : Đây là chuỗi, sẽ được tìm kiếm để khớp với mẫu ở đầu chuỗi.

flags : Bạn có thể chỉ định các cờ khác nhau bằng cách sử dụng bitwise OR (|). Đây là những bổ ngữ, được liệt kê trong bảng dưới đây.

Hàm re.match trả về một đối tượng phù hợp khi thành công, không có khi thất bại. Chúng tôi sử dụng hàm nhóm (num) hoặc nhóm () của đối tượng khớp để nhận được biểu thức phù hợp.

nhóm (num = 0) : Phương thức này trả về toàn bộ đối sánh (hoặc số nhóm con cụ thể).

các nhóm() : Phương thức này trả về tất cả các nhóm con phù hợp trong một bộ (trống nếu không có bất kỳ nhóm nào).

Chức năng về tìm kiếm

Hàm này tìm kiếm lần xuất hiện đầu tiên của mẫu RE trong chuỗi với các cờ tùy chọn .

Đây là cú pháp của hàm này:

           re.search(pattern, string, flags=0)

Đây là mô tả của các tham số :

pattern : Đây là biểu thức chính quy được so khớp.

string : Đây là chuỗi, sẽ được tìm kiếm để khớp với mẫu ở đầu chuỗi.

flags : Bạn có thể chỉ định các cờ khác nhau bằng cách sử dụng bitwise OR (|). Đây là những bổ ngữ, được liệt kê trong bảng dưới đây.

Hàm re.match trả về một đối tượng phù hợp khi thành công, không có khi thất bại. Chúng tôi sử dụng hàm nhóm (num) hoặc nhóm () của đối tượng khớp để nhận được biểu thức phù hợp.

nhóm (num = 0) : Phương thức này trả về toàn bộ đối sánh (hoặc số nhóm con cụ thể).

các nhóm() : Phương thức này trả về tất cả các nhóm con phù hợp trong một bộ (trống nếu không có bất kỳ nhóm nào).

So khớp với tìm kiếm 

Python cung cấp hai phép toán nguyên thủy khác nhau dựa trên các biểu thức chính quy: chỉ kiểm tra đối sánh cho một kết quả phù hợp ở đầu chuỗi, trong khi tìm kiếm kiểm tra một kết quả phù hợp ở bất kỳ đâu trong chuỗi (đây là những gì Perl thực hiện theo mặc định).

Thí dụ

#!/usr/bin/python
import re

line = "Cats are smarter than dogs";

matchObj = re.match( r'dogs', line, re.M|re.I)
if matchObj:
   print "match --> matchObj.group() : ", matchObj.group()
else:
   print "No match!!"

searchObj = re.search( r'dogs', line, re.M|re.I)
if searchObj:
   print "search --> searchObj.group() : ", searchObj.group()
else:
   print "Nothing found!!"

Khi đoạn mã trên được thực thi, nó tạo ra kết quả sau:

No match!!
search --> searchObj.group() :  dogs

Tìm kiếm và Thay thế

Một trong những quan trọng lại các phương pháp sử dụng biểu thức thông thường là phụ.

Cú pháp

re.sub(pattern, repl, string, max=0)

Phương pháp này thay thế tất cả các lần xuất hiện của mẫu RE trong chuỗi bằng repl , thay thế tất cả các lần xuất hiện trừ khi được cung cấp tối đa . Phương thức này trả về chuỗi đã sửa đổi.

Thí dụ

#!/usr/bin/python
import re

phone = "2004-959-559 # This is Phone Number"

# Delete Python-style comments
num = re.sub(r'#.*$', "", phone)
print "Phone Num : ", num

# Remove anything other than digits
num = re.sub(r'\D', "", phone)    
print "Phone Num : ", num

Khi đoạn mã trên được thực thi, nó tạo ra kết quả sau:

Phone Num :  2004-959-559
Phone Num :  2004959559

Công cụ sửa đổi biểu thức chính quy: Flags tùy chọn

Các ký tự biểu thức chính quy có thể bao gồm một công cụ sửa đổi tùy chọn để kiểm soát các khía cạnh khác nhau của đối sánh. Các bổ ngữ được chỉ định như một flags tùy chọn. Bạn có thể cung cấp nhiều công cụ sửa đổi bằng cách sử dụng OR (|) độc quyền, như được hiển thị trước đó và có thể được đại diện bởi một trong những công cụ này.

re.I : Thực hiện đối sánh không phân biệt chữ hoa chữ thường.

re.L : Phiên dịch các từ theo ngôn ngữ hiện tại. Cách diễn giải này ảnh hưởng đến nhóm chữ cái (\ w và \ W), cũng như hành vi ranh giới từ (\ b và \ B).

re.M : Làm cho $ khớp với phần cuối của một dòng (không chỉ phần cuối của chuỗi) và làm cho ^ khớp với phần đầu của bất kỳ dòng nào (không chỉ phần đầu của chuỗi).

re.S: Tạo dấu chấm (dấu chấm) khớp với bất kỳ ký tự nào, kể cả dòng mới.

re.U:Phiên dịch các chữ cái theo bộ ký tự Unicode. Cờ này ảnh hưởng đến hoạt động của \ w, \ W, \ b, \ B.

re.X: Cho phép cú pháp biểu thức chính quy “dễ thương hơn”. Nó bỏ qua khoảng trắng (ngoại trừ bên trong một tập hợp [] hoặc khi thoát ra bởi dấu gạch chéo ngược) và coi # chưa thoát như             một điểm đánh dấu nhận xét.

Mẫu biểu thức chính quy

^ :Đối sánh đầu dòng.

$:Đối sánh với cuối dòng.

. : Khớp với bất kỳ ký tự đơn nào ngoại trừ dòng mới. Sử dụng tùy chọn m cũng cho phép nó khớp với dòng mới.

[…]:Khớp với bất kỳ ký tự đơn nào trong ngoặc.

[^…]:Đối sánh bất kỳ ký tự đơn nào không có trong dấu ngoặc

re* :Khớp với 0 hoặc nhiều lần xuất hiện của biểu thức trước.

re+ : Khớp với 1 hoặc nhiều lần xuất hiện của biểu thức trước.

re?: Khớp với 0 hoặc 1 lần xuất hiện của biểu thức trước.

re{n}: Khớp chính xác n số lần xuất hiện của biểu thức trước đó.

re{n,}:So khớp n hoặc nhiều lần xuất hiện của biểu thức trước.

re{n,m}: Khớp ít nhất n và nhiều nhất m lần xuất hiện của biểu thức trước.

a|b :Đối sánh với a hoặc b.

(re):Nhóm các biểu thức chính quy và ghi nhớ văn bản phù hợp.

(? imx):Tạm thời bật tắt các tùy chọn i, m hoặc x trong một biểu thức chính quy. Nếu trong ngoặc đơn, chỉ vùng đó bị ảnh hưởng.

(?-imx):Tạm thời tắt các tùy chọn i, m hoặc x trong một biểu thức chính quy. Nếu trong ngoặc đơn, chỉ vùng đó bị ảnh hưởng.

(?:re):Nhóm các biểu thức chính quy mà không cần nhớ văn bản phù hợp

(? imx : re):Tạm thời bật tắt các tùy chọn i, m hoặc x trong dấu ngoặc đơn.

(?-imx :re): Tạm thời tắt các tùy chọn i, m hoặc x trong dấu ngoặc đơn.

(? # …): Bình luận.

(? = re):Chỉ định vị trí bằng cách sử dụng một mẫu. Không có phạm vi.

(?! re): Chỉ định vị trí bằng cách sử dụng phủ định mẫu. Không có phạm vi

(?> re): Khớp với mẫu độc lập mà không cần bẻ khóa ngược.

\w: Khớp các ký tự từ.

\W:Đối sánh các ký tự không phải từ khóa.

\s : Khớp khoảng trắng. Tương đương với [\ t \ n \ r \ f].

\S: Khớp với khoảng trắng

\d: Khớp các chữ số. Tương đương với [0-9].

\D: Phù hợp với non digits.

\A: Đối sánh với phần đầu của chuỗi.

\Z: Đối sánh với phần cuối của chuỗi. Nếu một dòng mới tồn tại, nó sẽ khớp ngay trước dòng mới.

\z: Đối sánh với phần cuối của chuỗi.

\G: Các trận đấu chỉ kết thúc trận đấu cuối cùng.

\b: Khớp các ranh giới từ khi nằm ngoài dấu ngoặc. Khớp với khoảng trắng lùi (0x08) khi bên trong dấu ngoặc.

\B: Đối sánh các ranh giới không có từ khóa.

\n, \t, etc : Đối sánh các ranh giới không có từ khóa.

\1…\9: Đối sánh biểu thức con được nhóm thứ n.

\10: Đối sánh biểu thức con được nhóm thứ n nếu nó đã khớp. Mặt khác đề cập đến biểu diễn bát phân của mã ký tự.

Write a comment