ỨNG DỤNG REGEX ĐỂ TRÍCH XUẤT 1 SỐ ĐIỆN THOẠI TỪ TIN NHẮN VĂN BẢN

CÁC NỘI DUNG CHÍNH
I. YÊU CẦU ĐẦU VÀO
1. CHUẨN BỊ NỘI DUNG
2. YÊU CẦU KIẾN THỨC
3. ĐỀ BÀI VÀ YÊU CẦU ĐẶT RA
II. CÁC BƯỚC THỰC HIỆN
II.a. Trích xuất toàn bộ số điện thoại trong tin nhắn văn bản đầu tiên.
II.b.Trích xuất từng phấn số điện thoại (tách riêng mã vùng/area code và số điện thoại)
II.c. Cách thức khác để trích xuất số điện thoại trong tin nhắn văn bản đầu tiên
III. KẾT LUẬN
1. Trường hợp vận dụng 
2. Ưu điểm
3. Nhược điểm

I. YÊU CẦU ĐẦU VÀO

1. CHUẨN BỊ NỘI DUNG

Để bắt đầu bài học, các bạn cần có ít nhất 01 máy tính để bàn hoặc laptop, trong đó đã cài đặt:

a. Python

b. Visual Studio Code

c. Microsoft Excel từ 2007 trở lên để tối ưu việc lập trình bằng python.

d. Teamviewer hoặc Ultraviewer để được các giảng viên và trợ giảng của trang web Pyan.vn hỗ trợ 24/7 nếu các bạn bị vướng mắc trong quá trình code.

2. YÊU CẦU KIẾN THỨC

Đối với bài học này, các bạn cần nẵm vững các kiến thức sau:

a. Cách sử dụng hàm PRINT

b. Cách gán giá trị cho cell trong excel.

c. Nếu chưa nắm vững kiến thức, các bạn có thể trao đổi thêm với các giảng viên và trợ giảng của trang web Pyan.vn để được hỗ trợ.

3. ĐỀ BÀI VÀ YÊU CẦU ĐẶT RA

a. Đề bài:

Có 1 bảng dữ liệu với vùng excel thể hiện thông tin 3 tin nhắn văn bản, trong các tin nhắn có chứa số điện thoại (nội dung như trong hình ở dưới)

b. Yêu cầu đặt ra:

Sử dụng lập trình Python để thực hiện trích xuất số điện thoại trong tin nhắn văn bản đầu tiên trong các điều kiện:

Trường hợp 1: Trích xuất toàn bộ số điện thoại

Trường hợp 2: Trích xuất từng phần của số điện thoại (tách mã vùng/area code và số điện thoại)

 

Bảng dữ liệu ban đầu:

Bảng dữ liệu thu được sau khi code:      

II. CÁC BƯỚC THỰC HIỆN

II.a. Trích xuất toàn bộ số điện thoại trong tin nhắn văn bản đầu tiên.

Bình thường chúng ta có thể sử dụng vòng lặp để chúng ta tìm kiếm chuỗi số điện thoại này, tuy nhiên trong python có sử dụng Regex để xử lý vấn đề này đơn giản hơn rất nhiều

Để sử dụng được Regex trong python, chúng ta cần import module re như sau:

import re

Ở đây chúng ta nhìn thấy chuỗi số điện thoại này đang có quy luật như sau:

Dãy số này bắt đầu bằng 3 chữ số (084) , sau đó đến dấu gạch ngang (-), sau đó đến 3 chữ số (123), rồi gạch ngang, rồi tiếp 3 chữ số (456), dấu gạch ngang và cuối cùng là 3 chữ số (789)

Trong Regex chúng ta có phương thức : \d (nhớ là có dấu \) để ám chỉ các chữ số từ 0 tới 9; như vậy chúng ta tạo ra 1 format tương ứng với format của chuỗi số điện thoại như sau:

\d\d\d-\d\d\d-\d\d\d-\d\d\d

Sau đó chúng ta sử dụng hàm compile của module re để tạo format và vào biến như sau:

number1_regex1 = re.compile(r’\d\d\d\d\d\d\d\d\d\d\d\d‘)

Sử dụng format tạo được để tìm kiếm trong chuỗi msg1 bằng hàm search như sau:

match1_number1 = number1_regex1.search(msg1)

Hàm search trong regex sẽ trả ra cho biến dưới dạng object, và để lấy thông tin chuỗi tìm được, ta cần gọi thêm hàm group

print(match1_number1.group())

Kết quả trả ra: 084-123-456-789 đúng như chúng ta mong muốn.

II.b.Trích xuất từng phấn số điện thoại (tách riêng mã vùng/area code và số điện thoại)

Đối với một chuỗi số điện thoại, các số đầu tiên của chuỗi đó thường sẽ là mã code theo quốc gia, ở đây ví dụ ta đang ở VN thì chúng ta có mã điện thoại vùng: 084, chúng ta cũng cần lấy số mã vùng này vậy chúng ta sẽ làm như sau:

Sử dụng format để tìm kiếm như sau:

number1_regex2 = re.compile(r’(\d\d\d)(\d\d\d\d\d\d\d\d\d)‘)

Chúng ta sẽ nhóm 3 chữ số đầu tiên lại với nhau thành 1 nhóm, các số còn lại vào một nhóm trong dấu ()

Tìm kiếm format này trong chuỗi đã cho:

match1_number2 = number1_regex2.search(msg1)

Khi này, biến match1_number2 sẽ chứa 2 group, group1 chứa mã vùng, group2 chứa số điện thoại

Để lấy được kết quả trong các nhóm, ta sử dụng hàm group(x) trong đó với ví dụ này, x sẽ có giá trị 1, hoặc 2 vì chúng ta đang có 2 group

In kết quả group 1

print(match1_number2.group(1))

Kết quả sẽ ra : 084

In kết quả group 2

print(match1_number2.group(2))

Kết quả sẽ ra: 123-456-789

Nếu muốn in ra cả chuỗi số chúng ta lại sử dụng hàm group()

print(match1_number2.group())

Kết quả sẽ ra: 084-123-456-789

II.c. Cách thức khác để trích xuất số điện thoại trong tin nhắn văn bản đầu tiên,

Có một cách viết khác cho format của chuỗi số điện thoại giúp chúng ta xử lý gọn gàng hơn như sau:

number1_regex3 = re.compile(r’\d{3}-\d{3}-\d{3}-\d{3}’)

Do chúng ta biết số lượng chữ số trong 1 nhóm số là 3 nên ta sẽ viết \d{3}

Tìm kiếm format này trong chuỗi đã có:

match1_number3 = number1_regex3.search(msg1)

In kết quả ra với việc sử dụng hàm group():

print(match1_number3.group())

Kết quả: 084-123-456-789

III. KẾT LUẬN

1. Trường hợp vận dụng

Được sử dụng để tạo ra những phương thức tìm kiếm cho 1 String theo quy luật nhất định giúp chúng ta tìm kiếm trong văn bản một cách đơn giản và hiệu quả hơn.

2. Ưu điểm

Việc cho việc truy xuất dữ liệu được đơn giản hơn rất nhiều so với việc dùng vòng lặp for.

3. Nhược điểm

Yêu cầu sự tỉ mỉ trong việc xây dựng công thức, dễ bị nhầm lẫn.

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *