Hướng dẫn flag in regex python

Hướng dẫn flag in regex python

Đã đăng vào thg 11 27, 2017 9:57 SA 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<first_name>\w+) (?P<last_name>\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.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

All rights reserved

Ở phần trước mình đã giới thiệu đến mọi người một số các phương thức hay được sử dụng trong Regular Expression rồi, phần này mình sẽ giới thiệu với mọi người các cú pháp pattern trong Python.

1, Các cú pháp pattern trong Python.

Dưới đây mình sẽ liệt kê ra một số các cú pháp pattern trong Python mà chúng ta hay sử dụng và kèm với theo nó là các ví dụ.

[]

Trong cặp dấu này chứa các ký tự có thể so khớp với văn bẳn. Nó gần giống như toán tử hoặc, nghĩa là chỉ cần nó so khớp 1 trong các ký tự được liệt kê trong cặp dấu này thì chuỗi đó được so khớp.

VD: pattern chuỗi bắt đầu bằng T hoặc t.

import re

str = 'thanhtaivtt'
match = re.match(r'[Tt]', str)
if match: #nếu tồn tại chuỗi khớp                     
    print('Khop!')
else:
    print ('Khong tim thay!')
# Kết quả:
# Khop!

Và bạn cũng có thể liệt kê ra các ký tự dưới dạng từ ... đến ... bằng cách thể hiện dấu - giữa hai khoảng đó.

VD: Pattern chuỗi bắt đầu bằng ký tự in thường hoặc bằng số.

import re

str = 'thanhtaivtt'
match = re.match(r'[a-z0-9]', str)
if match: #nếu tồn tại chuỗi khớp                     
    print('Khop!')
else:
    print ('Khong tim thay!')
# Kết quả:
# Khop!

.

Ký tự dấu . này tương đương với việc so khớp một chuỗi phải chứa ít nhất một ký tự.

VD:

import re

str = 'thanhtaivtt'
match = re.match(r'.', str)
if match: #nếu tồn tại chuỗi khớp                     
    print('Khop!')
else:
    print ('Khong tim thay!')
# Kết quả:
# Khop!

^

Ký tự này đại diện cho việc so khớp từ đầu của chuỗi.

VD: so khớp xem có phải đầu chuỗi là chữ h

import re

str = 'thanhtaivtt'
match = re.search(r'^h', str)
if match: #nếu tồn tại chuỗi khớp                     
    print('Khop!')
else:
    print ('Khong tim thay!')
# Kết quả:
# Khong tim thay!

$

Ký tự này đại diện cho việc so khớp đến cuối chuỗi.

VD: so khớp xem cuỗi chuỗi có phải chữ t

import re

str = 'thanhtaivtt'
match = re.search(r't$', str)
if match: #nếu tồn tại chuỗi khớp                     
    print('Khop!');
else:
    print ('Khong tim thay!')
# Kết quả:
# Khop!

*

Ký tự này đại diện cho có thể có hoặc không có ký tự trước nó.

VD: So khớp một chuỗi xem có thể bắt đầu bằng t hoặc không bắt đầu bằng t hoặc là chuỗi rỗng.

import re

str = ''
match = re.match(r't*', str)
if match: #nếu tồn tại chuỗi khớp                     
    print('Khop!');
else:
    print ('Khong tim thay!')
# Kết quả:
# Khop!

+

Ký tự này đại diện cho có thể xuất hiện ít nhất hoặc nhiều ký tự trước nó.

VD: So khớp xem một chuỗi chỉ chứa chữ cái in thường.

import re

str = 'vuthanhtai'
match = re.match(r'[a-z]+', str)
if match: #nếu tồn tại chuỗi khớp                     
    print('Khop!');
else:
    print ('Khong tim thay!')
# Kết quả:
# Khop!

?

Ký tự này đại diện cho chuỗi sẽ khớp với một trong các ký tự đằng trước nó.

VD: Kiểm tra xem một chuỗi có được bắt đầu bằng a hoặc b hay không.

import re

str = 'vuthanhtai'
match = re.match(r'ab?', str)
if match: #nếu tồn tại chuỗi khớp                     
    print('Khop!');
else:
    print ('Khong tim thay!')
# Kết quả:
# Khong tim thay!

{m, n}

Ký tự này đại diện cho việc so khớp xem chuỗi đằng trước nó xuất hiện bao nhiêu tối thiểu m lần và tối đa n lần. Nếu bỏ trống n thì là so khớp sự xuất hiện m lần của chuỗi đằng trước nó.

VD: Kiểm tra xem 3 chữ cái đầu của chuỗi có phải là v không.

import re

str = 'vuthanhtai'
match = re.match(r'v{3}', str)
if match: #nếu tồn tại chuỗi khớp                     
    print('Khop!');
else:
    print ('Khong tim thay!')
# Kết quả:
# Khong tim thay!

|

Ký tự này đại diện cho sự tồn tại của một trong 2 ký tự trước và sau nó.

VD: kiểm tra xem đầu chuỗi cõ phải là a hoặc b hay không.

import re

str = 'vuthanhtai'
match = re.match(r'a|b', str)
if match: #nếu tồn tại chuỗi khớp                     
    print('Khop!');
else:
    print ('Khong khop!')
# Kết quả:
# Khong Khop!

()

Ký tự này dùng để gom nhóm các pattern lại với nhau.

VD: Kiểm tra xem chuỗi chó chứa chũ 'thanh' không.

import re

str = 'vuthanhtai'
match = re.match(r'(.*)(thanh)(.*)', str)
if match: #nếu tồn tại chuỗi khớp                     
    print('Khop!');
else:
    print ('Khong khop!')
# Kết quả:
# Khop!

\

Ký tự này giúp phân biệt chuỗi sau nó không phải là ký tự đặc biệt.

VD: Kiểm tra xem đầu chuỗi có phải là dấu . không.

import re

str = '.vuthanhtai'
match = re.match(r'\.', str)
if match: #nếu tồn tại chuỗi khớp                     
    print('Khop!');
else:
    print ('Khong khop!')
# Kết quả:
# Khop!

Các pattern khác

Pattern Mô Tả
\A So khớp chuỗi là chuỗi.
\B So khớp nếu vị trí đặt \B không phải là đầu hoặc cuối chuỗi.
\d So khớp với số nguyên.
\D So khớp với các ký tự không phải là số.
\s So khớp với khoảng trắng và các ký tự chữ.
\S So khớp với các kỹ tự không phải là chữ.
\w So khớp với chữ hoặc số.
\W So khớp với các ký tự không phải là chữ hoặc số.

2, Các flags trong Python.

Như ở phần 1 mình có trình bày các thông số flag trong Regular Expression, nhưng mình chưa liệt kê ra các flag đó. Và dưới đây là một số các flags hay dùng trong Python.

  • I hoặc IGNORECASE - Không phân biệt hoa thường khi so khớp.
  • L hoặc LOCALE - So Khớp với local hiện tại.
  • M hoặc MULTILINE - Thay đổi $^ 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 hoặc ACSII - Thay đổi \w\W\b\B\d\D, \S\s thành so khơp full unicode.
  • S hoặc DOTALL -Thay đổi pattern . thành khớp với bất kỳ ký tự nào và dòng mới.
  • .....

VD: So khớp một chuỗi bắt đầu bằng v hoặc V.

import re

str = 'vuthanhtai'
match = re.match(r'V', str, re.IGNORECASE) # hoặc re.I
if match: #nếu tồn tại chuỗi khớp                     
    print('Khop!');
else:
    print ('Khong khop!')
# Kết quả:
# Khop!

3, Lời kết.

Như vậy phần này mình đã giới thiệu xong đến mọi người cơ bản về regular Expression trong Python rồi. Còn nếu bạn nào muốn tìm hiểu thêm tại đây.