Hướng dẫn re.match python example - re.match ví dụ python

Hướng dẫn re.match python example - re.match ví dụ python

Đã đăng vào thg 11 27, 2017 9:57 SA 3 phút đọc 3 phút đọc

1. Regex là gì?

Regular expression (Regex) là một chuỗi miêu tả một bộ các chuỗi khác, theo những quy tắc cú pháp nhất định. Bạn cũng có thể gọi Regex là một ngôn ngữ. Và hầu như ngôn ngữ lập trình nào cũng hỗ trợ Regular expression.

2. Regex trong Python.

Regular Expression trong Python được thể hiện qua module re, re Module cung cấp sự hỗ trợ đầy đủ các Regular Expression trong Python. Module này tạo Exception là re.error nếu xảy ra một lỗi trong khi biên dịch hoặc khi sử dụng một Regular Expression. Để sử dụng re việc đầu tiên bạn cần phải import module re vào chương trình, sử dụng với cú pháp như sau:

import re

3. Sử dụng Regex với search(), match(), split()

3.1 re.match()

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

So khớp pattern với string với các flag tùy ý. Dưới đây là cú pháp cho hàm này.

Chi tiết về tham số:

pattern : Đây là chuỗn cần so khớp.
string : Đây là chuỗi để tìm kiếm pattern cón tồn tại trong đó không.
flags : Bạn có thể xác định các flag khác nhau bởi sử dụng toán tử |. Các modifier này sẽ được liệt kê ở bảng bên dưới.

Hàm re.match trả về một đối tượng match nếu thành công và trả về None nếu thất bại. Chúng ta sử dụng hàm group(num) hoặc groups() của đối tượng match để lấy biểu thức đã được so khớp (kết nối).

>>> m = re.match(r"(?P\w+) (?P\w+)", "Malcolm Reynolds")
>>> m.group('first_name')
'Malcolm'
>>> m.group('last_name')
'Reynolds'
re.search(pattern, string, flags=0)

Phương thức này thực hiện tìm kiếm chuỗi so khớp trên string và nó sẽ trả về các giá trị được so khớp.

Trong đó:

pattern: là chuỗi regular expression.
string: là chuỗi cần so khớp.
flags: là các kiểu so khớp mà bạn muốn thực hiện. Nếu để trống thì flags sẽ bằng 0.
>>> email = ""
>>> m = re.search("remove_this", email)
>>> email[:m.start()] + email[m.end():]
''

3.4 re.split()

re.split(pattern, string, maxsplit=0, flags=0)

Trong đó:

pattern: là chuỗi regular expression.
string: là chuỗi cần so khớp để loại bỏ pattern
maxsplit: số phần chia giới hạn. Trong quá trình split khi số phần đã đến maxspit thì dừng lại và trả về mảng gồm các phần chia trước đó và chuỗi còn lại.
flags: là các kiểu so khớp mà bạn muốn thực hiện. Nếu để trống thì flags sẽ bằng 0.
>>> re.split('[a-f]+', '0a3B9', flags=re.IGNORECASE)
['0', '3', '9']

3.4 re.split()

3.3 Một số flag hay dùng trong Regular Expression

I hay IGNORECASE - Không phân biệt hoa thường khi tiến hành search hoặc match L hay LOCALE - So Khớp với local hiện tại. M hay MULTILINE - Thay đổi $ và ^ thành kết thúc của một dòng và bắt đầu của một dòng thay vì mặc định là kết thúc chuỗi và bắt đầu chuỗi. A hay ACSII - Thay đổi \w, \W, \b, \B, \d, \D, \S và \s thành so khơp full unicode. S hay DOTALL -Thay đổi pattern . thành khớp với bất kỳ ký tự nào và dòng mới. ...

4. Kết Luận

Regular Expression trong python còn rất nhiều nhưng trong bài này mình chỉ hướng dẫn các bạn sử dụng một số regex hay dùng trong python mong rằng nó giúp ích được các bạn.

xem thêm : https://viblo.asia/p/chia-se-10-regular-expression-huu-ich-ma-developer-nen-biet-Qbq5QJPLKD8 https://viblo.asia/p/cac-ki-tu-dac-biet-trong-regular-expressions-phan-2-ORNZqP6MK0n

RegEx hay biểu thức chính quy (Regular Expression) là một chuỗi ký tự tạo thành một biểu mẫu tìm kiếm (search pattern). RegEx được sử dụng để kiểm tra xem một chuỗi có chưa mẫu tìm kiêms được chỉ định hay không.

RegEx module

Trong python, có một gói tích hợp có tên

pattern : Đây là chuỗn cần so khớp.
string : Đây là chuỗi để tìm kiếm pattern cón tồn tại trong đó không.
flags : Bạn có thể xác định các flag khác nhau bởi sử dụng toán tử |. Các modifier này sẽ được liệt kê ở bảng bên dưới.
3 có khả năng sử dụng để làm việc với biểu thức chính quy. Để import module
pattern : Đây là chuỗn cần so khớp.
string : Đây là chuỗi để tìm kiếm pattern cón tồn tại trong đó không.
flags : Bạn có thể xác định các flag khác nhau bởi sử dụng toán tử |. Các modifier này sẽ được liệt kê ở bảng bên dưới.
3

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

RegEx trong python

Sau khi import module

pattern : Đây là chuỗn cần so khớp.
string : Đây là chuỗi để tìm kiếm pattern cón tồn tại trong đó không.
flags : Bạn có thể xác định các flag khác nhau bởi sử dụng toán tử |. Các modifier này sẽ được liệt kê ở bảng bên dưới.
3 thì chúng ta có thể sử dụng biểu thức chính quy. Ví dụ: Tìm kiễm chuỗi bắt đầu bằng 'The' và kết thúc bằng 'Spain':

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

Các hàm xử lý RegEx

Module

pattern : Đây là chuỗn cần so khớp.
string : Đây là chuỗi để tìm kiếm pattern cón tồn tại trong đó không.
flags : Bạn có thể xác định các flag khác nhau bởi sử dụng toán tử |. Các modifier này sẽ được liệt kê ở bảng bên dưới.
3 cung cấp cho chúng ta các hàm tìm kiếm một chuỗi phù hợp với biểu thức.

HàmMô tả
findall Trả về một list các kết quả phù hợp
search Trả về một
pattern : Đây là chuỗn cần so khớp.
string : Đây là chuỗi để tìm kiếm pattern cón tồn tại trong đó không.
flags : Bạn có thể xác định các flag khác nhau bởi sử dụng toán tử |. Các modifier này sẽ được liệt kê ở bảng bên dưới.
7 object nếu có bất kỳ vị trị nào trong chuỗi phù hợp
split Trả về một list chuỗi đã được phân chia ở vị trí match
sub Thay thế các vị trí match với biểu thức bằng một chuỗi khác

1. Hàm findall()

In ra tất cả những đoạn phù hợp:

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

Hoặc nếu không tìm thấy kết quả nào phù hợp thì trả về một danh sách rỗng

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

2. Hàm search()

Tìm kiếm khoảng trắng đầu tiên trong chuỗi:

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

Hoặc sẽ trả về None nếu không tìm thấy

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

3. Hàm split()

Tách các từ trong câu:

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

Chúng ta có thể chỉ định số lần xuất hiện qua tham số

pattern : Đây là chuỗn cần so khớp.
string : Đây là chuỗi để tìm kiếm pattern cón tồn tại trong đó không.
flags : Bạn có thể xác định các flag khác nhau bởi sử dụng toán tử |. Các modifier này sẽ được liệt kê ở bảng bên dưới.
8. Ví dụ tách chuỗi ở lần xuất hiện đầu tiên của khoảng trắng:

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

4. Hàm sub()

Thay thế mọi khoảng trắng bằng số 9:

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

Hoặc có thể hạn chế số lần thay thế qua tham số

pattern : Đây là chuỗn cần so khớp.
string : Đây là chuỗi để tìm kiếm pattern cón tồn tại trong đó không.
flags : Bạn có thể xác định các flag khác nhau bởi sử dụng toán tử |. Các modifier này sẽ được liệt kê ở bảng bên dưới.
9:

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

Metacharacters

Metacharacters là những ký tự có ý nghĩa đặc biệt

Ký tựMô tảVí dụChuỗi phù hợp
[] Một tập hợp các ký tự "[a-e]" "adbc"
\ Tín hiệu thể hiện một chuỗi đặc biệt (hoặc sử dụng để thoát các ký tự đặc biệt) "\d" "he1lo"
\D Chuỗi không chứa ký tự là số "\D" "Hello"
\s Chuỗi chứa khoảng trắng "\s" "Hello world"
\S Chuỗi không chứa khoảng trắng "\S" "HelloWorld"
\w Chuỗi chứa bất kỳ ký tự nào trong nhóm từ a tới Z, từ 0 tới 9 và dấu _ (underscore) "\w" "This is global_variable"
\W Ngược lại với
>>> m = re.match(r"(?P\w+) (?P\w+)", "Malcolm Reynolds")
>>> m.group('first_name')
'Malcolm'
>>> m.group('last_name')
'Reynolds'
1
"\W" "*& ^ !"
\Z Kết thúc chuỗi bằng các ký tự được chỉ định "Spain\Z" "The Spain"
SetsSets là tập hợp các ký tự bên trong dấu
>>> m = re.match(r"(?P\w+) (?P\w+)", "Malcolm Reynolds")
>>> m.group('first_name')
'Malcolm'
>>> m.group('last_name')
'Reynolds'
2 với ý nghĩa đặc biệt:
Set[arg]
Chuỗi chứa một trong các ký tự
>>> m = re.match(r"(?P\w+) (?P\w+)", "Malcolm Reynolds")
>>> m.group('first_name')
'Malcolm'
>>> m.group('last_name')
'Reynolds'
3,
>>> m = re.match(r"(?P\w+) (?P\w+)", "Malcolm Reynolds")
>>> m.group('first_name')
'Malcolm'
>>> m.group('last_name')
'Reynolds'
4 hoặc
>>> m = re.match(r"(?P\w+) (?P\w+)", "Malcolm Reynolds")
>>> m.group('first_name')
'Malcolm'
>>> m.group('last_name')
'Reynolds'
5
[a-n] Chuỗi chứa một trong các ký tự nằm giữa
>>> m = re.match(r"(?P\w+) (?P\w+)", "Malcolm Reynolds")
>>> m.group('first_name')
'Malcolm'
>>> m.group('last_name')
'Reynolds'
3 và
>>> m = re.match(r"(?P\w+) (?P\w+)", "Malcolm Reynolds")
>>> m.group('first_name')
'Malcolm'
>>> m.group('last_name')
'Reynolds'
7 trong bảng chữ cái
>>> m = re.match(r"(?P\w+) (?P\w+)", "Malcolm Reynolds")
>>> m.group('first_name')
'Malcolm'
>>> m.group('last_name')
'Reynolds'
8
[^arg]

Chuỗi không chứa bất kỳ ký tự >>> m = re.match(r"(?P\w+) (?P\w+)", "Malcolm Reynolds") >>> m.group('first_name') 'Malcolm' >>> m.group('last_name') 'Reynolds' 3, >>> m = re.match(r"(?P\w+) (?P\w+)", "Malcolm Reynolds") >>> m.group('first_name') 'Malcolm' >>> m.group('last_name') 'Reynolds' 4 và >>> m = re.match(r"(?P\w+) (?P\w+)", "Malcolm Reynolds") >>> m.group('first_name') 'Malcolm' >>> m.group('last_name') 'Reynolds' 5

[0124]

Ký tựMô tảVí dụChuỗi phù hợp
\A Bắt đầu chuỗi bằng ký tự chỉ định "\AThe" "The world"
\b Bắt đầu hoặc kết thúc của một từ bằng ký tự chỉ định r"\bSpa"r"ain\b"
r"ain\b"
"The rain in Spain""He is Bi Rain"
"He is Bi Rain"
\B Khớp với các ký tự chỉ định nhưng không nằm ở đầu hoặc cuối từ r"\BSpa"r"ain\B"
r"ain\B"
"This is GSpan company""No words are rains"
"No words are rains"
\d Chuỗi chứa ký tự là chữ số "\d" "he1lo"
\D Chuỗi không chứa ký tự là số "\D" "Hello"
\s Chuỗi chứa khoảng trắng "\s" "Hello world"
\S Chuỗi không chứa khoảng trắng "\S" "HelloWorld"
\w Chuỗi chứa bất kỳ ký tự nào trong nhóm từ a tới Z, từ 0 tới 9 và dấu _ (underscore) "\w" "This is global_variable"
\W Ngược lại với
>>> m = re.match(r"(?P\w+) (?P\w+)", "Malcolm Reynolds")
>>> m.group('first_name')
'Malcolm'
>>> m.group('last_name')
'Reynolds'
1
"\W" "*& ^ !"
\Z Kết thúc chuỗi bằng các ký tự được chỉ định "Spain\Z" "The Spain"

Sets

Sets là tập hợp các ký tự bên trong dấu

>>> m = re.match(r"(?P\w+) (?P\w+)", "Malcolm Reynolds")
>>> m.group('first_name')
'Malcolm'
>>> m.group('last_name')
'Reynolds'
2 với ý nghĩa đặc biệt:

SetMô tả
[arg] Chuỗi chứa một trong các ký tự
>>> m = re.match(r"(?P\w+) (?P\w+)", "Malcolm Reynolds")
>>> m.group('first_name')
'Malcolm'
>>> m.group('last_name')
'Reynolds'
3,
>>> m = re.match(r"(?P\w+) (?P\w+)", "Malcolm Reynolds")
>>> m.group('first_name')
'Malcolm'
>>> m.group('last_name')
'Reynolds'
4 hoặc
>>> m = re.match(r"(?P\w+) (?P\w+)", "Malcolm Reynolds")
>>> m.group('first_name')
'Malcolm'
>>> m.group('last_name')
'Reynolds'
5
[a-n] Chuỗi chứa một trong các ký tự nằm giữa
>>> m = re.match(r"(?P\w+) (?P\w+)", "Malcolm Reynolds")
>>> m.group('first_name')
'Malcolm'
>>> m.group('last_name')
'Reynolds'
3 và
>>> m = re.match(r"(?P\w+) (?P\w+)", "Malcolm Reynolds")
>>> m.group('first_name')
'Malcolm'
>>> m.group('last_name')
'Reynolds'
7 trong bảng chữ cái
>>> m = re.match(r"(?P\w+) (?P\w+)", "Malcolm Reynolds")
>>> m.group('first_name')
'Malcolm'
>>> m.group('last_name')
'Reynolds'
8
[^arg] Chuỗi không chứa bất kỳ ký tự
>>> m = re.match(r"(?P\w+) (?P\w+)", "Malcolm Reynolds")
>>> m.group('first_name')
'Malcolm'
>>> m.group('last_name')
'Reynolds'
3,
>>> m = re.match(r"(?P\w+) (?P\w+)", "Malcolm Reynolds")
>>> m.group('first_name')
'Malcolm'
>>> m.group('last_name')
'Reynolds'
4 và
>>> m = re.match(r"(?P\w+) (?P\w+)", "Malcolm Reynolds")
>>> m.group('first_name')
'Malcolm'
>>> m.group('last_name')
'Reynolds'
5
[0124] Chuỗi chứa bất kỳ chữ số nào trong nhóm
re.search(pattern, string, flags=0)
2,
re.search(pattern, string, flags=0)
3,
re.search(pattern, string, flags=0)
4 hoặc
re.search(pattern, string, flags=0)
5
[0-9] Chuỗi chứa ký tự chữ số (tương đương sử dụng
re.search(pattern, string, flags=0)
6)
[0-5][0-9] Chuỗi chứa 2 ký tự số liên tiếp, số đầu tiên trong khoảng từ 0->5, số thứ 2 trong khoảng 0->9
[a-zA-Z] Chuỗi chứa ký tự là chữ cái không phân biệt hoa và thường
[+] Trong sets, các
re.search(pattern, string, flags=0)
7 không mang ý nghĩa đặc biệt nữa, chúng chỉ là các ký tự thông thường. Biểu thức bên là chuỗi chứa ký tự
re.search(pattern, string, flags=0)
8

Đối tượng Match

Match là đối tượng chứa thông tin về tìm kiếm phù hợp và kết quả của chúng. Nếu không có tìm kiếm nào phù hợp thì sẽ trả về

re.search(pattern, string, flags=0)
9 chứ không phải là đối tượng
pattern : Đây là chuỗn cần so khớp.
string : Đây là chuỗi để tìm kiếm pattern cón tồn tại trong đó không.
flags : Bạn có thể xác định các flag khác nhau bởi sử dụng toán tử |. Các modifier này sẽ được liệt kê ở bảng bên dưới.
7 Các thuộc tính và phương thức của
pattern : Đây là chuỗn cần so khớp.
string : Đây là chuỗi để tìm kiếm pattern cón tồn tại trong đó không.
flags : Bạn có thể xác định các flag khác nhau bởi sử dụng toán tử |. Các modifier này sẽ được liệt kê ở bảng bên dưới.
7

.string trả về chuỗi được truyền vào hàm .span() trả về một tuple chứa điểm bắt đầu và kết thúc của vị trí phù hợp .group() trả về phần chuỗi phù hợp

In ra vị trị bắt đầu và kết thúc của lần xuất hiện đầu tiên của từ bắt đầu bằng chữ

pattern: là chuỗi regular expression.
string: là chuỗi cần so khớp.
flags: là các kiểu so khớp mà bạn muốn thực hiện. Nếu để trống thì flags sẽ bằng 0.
2:

pattern : Đây là chuỗn cần so khớp.
string : Đây là chuỗi để tìm kiếm pattern cón tồn tại trong đó không.
flags : Bạn có thể xác định các flag khác nhau bởi sử dụng toán tử |. Các modifier này sẽ được liệt kê ở bảng bên dưới.
0

In ra chuỗi đã được truyền vào hàm:

pattern : Đây là chuỗn cần so khớp.
string : Đây là chuỗi để tìm kiếm pattern cón tồn tại trong đó không.
flags : Bạn có thể xác định các flag khác nhau bởi sử dụng toán tử |. Các modifier này sẽ được liệt kê ở bảng bên dưới.
1

In ra đoạn phù hợp với biểu thức trong chuỗi cho trước:

pattern : Đây là chuỗn cần so khớp.
string : Đây là chuỗi để tìm kiếm pattern cón tồn tại trong đó không.
flags : Bạn có thể xác định các flag khác nhau bởi sử dụng toán tử |. Các modifier này sẽ được liệt kê ở bảng bên dưới.
2

Tổng kết

RegEx thật sự rất mạnh mạnh mẽ và nó sẽ giúp các bạn xử lý được rất nhiều bài toán khó, phức tạp nếu áp dụng cách thông thường. Nhưng nó cũng thực sự khá rối rắm với nhưng người chưa tìm hiểu kỹ về nó. Hy vọng các bạn sẽ tìm được niềm vui khi sử dụng RegEx