Tài liệu cho mô-đun Re dành cho Python 3 trong. Re mô-đun cho các biểu thức chính quy

Biểu thức chính quy là một thành phần rất phổ biến của hầu hết mọi ngôn ngữ lập trình. Chúng giúp bạn nhanh chóng truy cập thông tin bạn cần. Đặc biệt, chúng được sử dụng khi cần xử lý văn bản. Python đi kèm với một mô-đun đặc biệt theo mặc định. re, chịu trách nhiệm làm việc với các biểu thức chính quy.

Hôm nay chúng ta sẽ nói chi tiết về nó nói chung là gì, cách làm việc với chúng và cách mô-đun re sẽ giúp.

Biểu thức chính quy: giới thiệu

Công dụng của biểu thức chính quy là gì? Gần như tất cả. Ví dụ:

  1. Các ứng dụng web yêu cầu xác thực văn bản. Một ví dụ điển hình là ứng dụng thư trực tuyến.
  2. Bất kỳ dự án nào khác liên quan đến văn bản, cơ sở dữ liệu, v.v.

Trước khi bắt đầu phân tích cú pháp, chúng ta nên hiểu chi tiết hơn các nguyên tắc cơ bản về hoạt động của thư viện re và nói chung, những gì nói chung là tốt về nó. Chúng tôi cũng sẽ đưa ra các ví dụ từ thực tế thực tế, nơi chúng tôi sẽ mô tả cơ chế sử dụng chúng. Bạn có thể tạo một mẫu như vậy, phù hợp để bạn thực hiện nhiều thao tác với văn bản.

Mẫu trong thư viện Re là gì?

Với nó, bạn có thể tìm kiếm thông tin về nhiều loại khác nhau, lấy thông tin tương ứng với chúng, để làm cho các chức năng khác thích ứng hơn. Và, tất nhiên, để xử lý dữ liệu này.

Ví dụ: lấy mẫu sau: s+. Nó có nghĩa là bất kỳ ký tự khoảng trắng nào. Nếu bạn thêm một dấu cộng vào nó, thì điều này có nghĩa là mẫu bao gồm nhiều hơn một khoảng trắng. Nó thậm chí có thể khớp các ký tự tab được gọi bằng t+.

Trước khi sử dụng chúng, bạn cần nhập thư viện Re. Sau đó, chúng tôi sử dụng một lệnh đặc biệt để biên dịch mẫu. Điều này được thực hiện trong hai bước.

>>> nhập lại

>>> regex = re.compile ('s +')

Cụ thể, mã này thực hiện thao tác biên dịch một mẫu có thể được sử dụng. ví dụ: để tìm kiếm khoảng trắng (một hoặc nhiều).

Nhận thông tin riêng biệt từ các chuỗi khác nhau bằng cách sử dụng biểu thức chính quy

Giả sử chúng ta có một biến chứa thông tin sau.

>>> text = “” ”100 Tin học INF

213 Toán MAT  

156 ENG Tiếng Anh »» »

Nó chứa ba khóa đào tạo. Mỗi người trong số họ bao gồm ba phần - số, mã và tên. Chúng ta thấy rằng khoảng cách giữa các từ này là khác nhau. Để ngắt dòng này thành các số và từ riêng biệt ta phải làm gì? Có hai phương pháp để đạt được mục tiêu này:

  1. gọi một hàm chia lại.
  2. áp dụng chức năng chia cho biểu thức chính quy.

Đây là một ví dụ về việc sử dụng cú pháp của từng phương thức cho biến của chúng ta.

>>> re.split ('s +', text)  

# hoặc là

>>> regex.split (văn bản)

Đầu ra: ['100', 'INF', 'Computer Science', '213', 'MAT', 'Math', '156', 'ENG', 'English']

Nói chung, cả hai phương pháp đều có thể được sử dụng. Nhưng thực sự dễ dàng hơn nhiều khi sử dụng một biểu thức chính quy thay vì sử dụng hàm nhiều lần. chia lại.

Tìm kết quả phù hợp với ba chức năng

Giả sử chúng ta chỉ cần trích xuất các số từ một chuỗi. Cần phải làm gì cho việc này?

re.findall ()

Đây là một trường hợp sử dụng cho hàm findall (), cùng với các biểu thức chính quy, cho phép bạn trích xuất các lần xuất hiện của một hoặc nhiều số từ một biến văn bản.

>>> in (văn bản)  

100 tin học INF

213 Toán MAT  

156 ENG tiếng Anh

>>> regex_num = re.compile ('d +')  

>>> regex_num.findall (văn bản)  

['100', '213', '156']

Cùng với ký hiệu d, chúng tôi đã sử dụng một mẫu cho biết hoàn toàn bất kỳ giá trị số nào nằm trong một biến hoặc văn bản. Và vì chúng tôi đã thêm một + ở đó, điều này có nghĩa là ít nhất một số phải có mặt. 

Bạn cũng có thể sử dụng dấu * để chỉ định rằng sự hiện diện của một chữ số là không bắt buộc để tìm thấy một kết quả phù hợp.

Nhưng trong trường hợp của chúng tôi, vì chúng tôi sử dụng +, chúng tôi đã trích xuất bằng findall () 1 hoặc nhiều ký hiệu kỹ thuật số của các khóa học từ văn bản. Do đó, trong trường hợp của chúng ta, biểu thức chính quy đóng vai trò như cài đặt cho hàm.

re.search () vs re.match ()

Như bạn có thể đoán từ tên của các hàm, lần đầu tiên tìm kiếm sự phù hợp trong văn bản. Câu hỏi: Sự khác biệt giữa tìm kiếm? Vấn đề là nó trả về một đối tượng cụ thể phù hợp với mẫu chứ không phải toàn bộ chuỗi kết quả tìm được ở dạng danh sách, như hàm trước đó.

Đổi lại, hàm re.match cũng làm như vậy. Chỉ có cú pháp là khác nhau. Mẫu phải được đặt ở đầu. 

Hãy lấy một ví dụ minh chứng điều này.

>>> # tạo một biến với văn bản

>>> text2 = «» »Tin học INF

213 MAT Toán 156 ″ »»  

>>> # biên dịch regex và tìm kiếm các mẫu

>>> regex_num = re.compile ('d +')  

>>> s = regex_num.search (text2)  

>>> print ('Chỉ mục đầu tiên:', s.start ())  

>>> print ('Chỉ mục cuối cùng:', s.end ())  

>>> print (text2 [s.start (): s.end ()]) 

Chỉ số đầu tiên: 17 

Chỉ số cuối cùng: 20

213

Nếu bạn muốn nhận được một kết quả tương tự theo một cách khác, bạn có thể sử dụng hàm tập đoàn().

Thay thế một phần văn bản bằng Re library

Để thay thế văn bản, hãy sử dụng hàm re.sub (). Giả sử danh sách các khóa học của chúng tôi đã thay đổi một chút. Chúng tôi thấy rằng sau mỗi giá trị kỹ thuật số, chúng tôi có một tab. Nhiệm vụ của chúng ta là kết hợp tất cả chuỗi này thành một dòng. Để làm điều này, chúng ta cần thay thế biểu thức s + để vượt qua 

Văn bản ban đầu là:

# tạo một biến bằng văn bản

>>> text = “” ”100 INF t Tin học

213 MAT t Toán  

156 TIẾNG ANH »» »»  

>>> in (văn bản)  

100 THÔNG TIN Tin học

213 MAT Toán học  

156 ENG Tiếng Anh

Để thực hiện thao tác mong muốn, chúng tôi đã sử dụng các dòng mã sau.

# thay thế một hoặc nhiều khoảng trắng bằng 1

>>> regex = re.compile ('s +')  

>>> print (regex.sub ('', text))  

Kết quả là, chúng tôi có một dòng. 

101 COM Máy tính 205 MAT Toán 189 ENG Tiếng Anh

Bây giờ hãy xem xét một vấn đề khác. Chúng tôi không phải đối mặt với nhiệm vụ đặt khoảng trống. Điều quan trọng hơn nhiều đối với chúng tôi là tất cả các tên khóa học đều bắt đầu trên một dòng mới. Để làm điều này, một biểu thức khác được sử dụng để thêm một dòng mới cho ngoại lệ. Đây là kiểu biểu hiện gì?

Thư viện Re hỗ trợ một tính năng như đối sánh phủ định. Nó khác với trực tiếp ở chỗ nó chứa một dấu chấm than trước dấu gạch chéo. Tức là, nếu chúng ta cần bỏ qua ký tự dòng mới, thì chúng ta cần viết! N thay vì n.

Chúng tôi nhận được mã sau đây.

# xóa tất cả các khoảng trắng ngoại trừ dòng mới  

>>> regex = re.compile ('((?! n) s +)')  

>>> print (regex.sub ('', text))  

100 tin học INF

213 Toán MAT  

156 ENG tiếng Anh

Nhóm biểu thức chính quy là gì?

Với sự trợ giúp của các nhóm biểu thức chính quy, chúng ta có thể nhận được các đối tượng mong muốn ở dạng các phần tử riêng biệt, và không nằm trong một dòng. 

Giả sử chúng ta cần lấy số, mã và tên của khóa học không nằm trong một dòng, mà là các phần tử riêng biệt. Để hoàn thành nhiệm vụ, bạn sẽ cần phải viết một số lượng lớn các dòng mã không cần thiết. 

Trên thực tế, nhiệm vụ có thể được đơn giản hóa rất nhiều. Bạn có thể biên dịch mẫu cho tất cả các mục nhập và chỉ cần chỉ định dữ liệu mà bạn cần lấy từ dấu ngoặc.

Sẽ có một số dòng rất nhỏ. 

# tạo các nhóm mẫu văn bản khóa học và trích xuất chúng

>>> course_pattern = '([0-9] +) s * ([A-ZY] {3}) s * ([a-zA-ZoY] {4,})'  

>>> re.findall (course_pattern, text)  

[('100', 'INF', 'Khoa học Máy tính'), ('213', 'MAT', 'Toán'), ('156', 'ENG', 'Tiếng Anh')]

Khái niệm đối sánh "tham lam"

Theo tiêu chuẩn, biểu thức chính quy được lập trình để trích xuất lượng dữ liệu phù hợp tối đa. Và ngay cả khi bạn cần ít hơn nhiều.

Hãy xem mã HTML mẫu mà chúng ta cần lấy thẻ.

>>> text = “Ví dụ về Đối sánh Cụm từ Thông dụng Tham lam”  

>>> re.findall ('', text)  

['Ví dụ về Đối sánh Cụm từ Thông dụng Tham lam']

Thay vì chỉ trích xuất một thẻ, Python lấy toàn bộ chuỗi. Đó là lý do tại sao nó được gọi là tham lam.

Và phải làm gì để chỉ nhận được thẻ? Trong trường hợp này, bạn cần sử dụng kết hợp lười biếng. Để chỉ định một biểu thức như vậy, một dấu chấm hỏi được thêm vào cuối mẫu.

Bạn sẽ nhận được mã sau và đầu ra của trình thông dịch.

>>> re.findall ('', text)  

[”,”]

Nếu nó được yêu cầu chỉ nhận được lần xuất hiện đầu tiên, thì phương pháp được sử dụng Tìm kiếm ().

re.search ('', text) .group ()  

"

Sau đó, chỉ thẻ mở sẽ được tìm thấy.

Mẫu biểu thức phổ biến

Đây là bảng chứa các mẫu biểu thức chính quy được sử dụng phổ biến nhất.

Tài liệu cho mô-đun Re dành cho Python 3 trong. Re mô-đun cho các biểu thức chính quy

Kết luận

Chúng tôi chỉ xem xét các phương pháp cơ bản nhất để làm việc với các biểu thức chính quy. Trong mọi trường hợp, bạn đã thấy chúng quan trọng như thế nào. Và ở đây, không có gì khác biệt cho dù cần phải phân tích cú pháp toàn bộ văn bản hay các đoạn riêng lẻ của nó, cho dù cần thiết phải phân tích một bài đăng trên mạng xã hội hay thu thập dữ liệu để xử lý sau này. Biểu thức chính quy là một trợ giúp đáng tin cậy trong vấn đề này.

Chúng cho phép bạn thực hiện các tác vụ như:

  1. Chỉ định định dạng của dữ liệu, chẳng hạn như địa chỉ email hoặc số điện thoại.
  2. Lấy một chuỗi và chia nó thành nhiều chuỗi nhỏ hơn.
  3. Thực hiện các thao tác khác nhau với văn bản, chẳng hạn như tìm kiếm, trích xuất thông tin cần thiết hoặc thay thế một phần của các ký tự.

Biểu thức chính quy cũng cho phép bạn thực hiện các hoạt động không tầm thường. Thoạt nhìn, việc nắm vững môn khoa học này không hề đơn giản. Nhưng trên thực tế, mọi thứ đều được tiêu chuẩn hóa, vì vậy chỉ cần tìm hiểu một lần là đủ, sau đó công cụ này có thể được sử dụng không chỉ trong Python mà còn trong bất kỳ ngôn ngữ lập trình nào khác. Ngay cả Excel cũng sử dụng các biểu thức chính quy để tự động xử lý dữ liệu. Vì vậy, thật tội lỗi nếu không sử dụng công cụ này.

Bình luận