Just remove the pattern which matches all the uppercase alphabets from the character class and put it in between two
>>> s= "S23#"
>>> s1 = "WS23%"
>>> re.match[r"^[0-9[]%#+?=:._,!/-]*[A-Za-z][0-9[]%#+?=:._,!/-]*$", s]
>>> re.match[r"^[0-9[]%#+?=:._,!/-]*[A-Za-z][0-9[]%#+?=:._,!/-]*$", s1]
>>>
5 patterns.re.match[r"^[0-9[]%#+?=:._,!/-]*[A-Za-z][0-9[]%#+?=:._,!/-]*$", st]
Example:
>>> s= "S23#"
>>> s1 = "WS23%"
>>> re.match[r"^[0-9[]%#+?=:._,!/-]*[A-Za-z][0-9[]%#+?=:._,!/-]*$", s]
>>> re.match[r"^[0-9[]%#+?=:._,!/-]*[A-Za-z][0-9[]%#+?=:._,!/-]*$", s1]
>>>
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
>>> s= "S23#"
>>> s1 = "WS23%"
>>> re.match[r"^[0-9[]%#+?=:._,!/-]*[A-Za-z][0-9[]%#+?=:._,!/-]*$", s]
>>> re.match[r"^[0-9[]%#+?=:._,!/-]*[A-Za-z][0-9[]%#+?=:._,!/-]*$", s1]
>>>
6 có khả năng sử dụng để làm việc với biểu thức chính quy. Để import module >>> s= "S23#"
>>> s1 = "WS23%"
>>> re.match[r"^[0-9[]%#+?=:._,!/-]*[A-Za-z][0-9[]%#+?=:._,!/-]*$", s]
>>> re.match[r"^[0-9[]%#+?=:._,!/-]*[A-Za-z][0-9[]%#+?=:._,!/-]*$", s1]
>>>
6import re
RegEx trong python
Sau khi import module
>>> s= "S23#"
>>> s1 = "WS23%"
>>> re.match[r"^[0-9[]%#+?=:._,!/-]*[A-Za-z][0-9[]%#+?=:._,!/-]*$", s]
>>> re.match[r"^[0-9[]%#+?=:._,!/-]*[A-Za-z][0-9[]%#+?=:._,!/-]*$", s1]
>>>
6 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':import re
txt = "The rain in Spain"
x = re.search["^The.*Spain$", txt]
Các hàm xử lý RegEx
Module
>>> s= "S23#"
>>> s1 = "WS23%"
>>> re.match[r"^[0-9[]%#+?=:._,!/-]*[A-Za-z][0-9[]%#+?=:._,!/-]*$", s]
>>> re.match[r"^[0-9[]%#+?=:._,!/-]*[A-Za-z][0-9[]%#+?=:._,!/-]*$", s1]
>>>
6 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.findall | Trả về một list các kết quả phù hợp |
search | Trả về một 0 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:
In [11]: import re
...:
...: str = "The rain in Spain"
...: x = re.findall["ai", str]
...: print[x]
['ai', 'ai']
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
In [12]: import re
...:
...: str = "The rain in Spain"
...: x = re.findall["Portugal", str]
...: print[x]
[]
2. Hàm search[]
Tìm kiếm khoảng trắng đầu tiên trong chuỗi:
In [13]: import re
...:
...: str = "The rain in Spain"
...: x = re.search["\s", str]
...:
...: print["The first white-space character is located in position:", x.start[]]
The first white-space character is located in position: 3
Hoặc sẽ trả về None nếu không tìm thấy
In [15]: import re
...:
...: str = "The rain in Spain"
...: x = re.search["\d", str]
...:
...: print[x]
None
3. Hàm split[]
Tách các từ trong câu:
In [16]: import re
...:
...: str = "The rain in Spain"
...: x = re.split["\s", str]
...: print[x]
['The', 'rain', 'in', 'Spain']
Chúng ta có thể chỉ định số lần xuất hiện qua tham số
import re
1. Ví dụ tách chuỗi ở lần xuất hiện đầu tiên của khoảng trắng:In [17]: import re
...:
...: str = "The rain in Spain"
...: x = re.split["\s", str, 1]
...: print[x]
['The', 'rain in Spain']
4. Hàm sub[]
Thay thế mọi khoảng trắng bằng số 9:
>>> s= "S23#"
>>> s1 = "WS23%"
>>> re.match[r"^[0-9[]%#+?=:._,!/-]*[A-Za-z][0-9[]%#+?=:._,!/-]*$", s]
>>> re.match[r"^[0-9[]%#+?=:._,!/-]*[A-Za-z][0-9[]%#+?=:._,!/-]*$", s1]
>>>
0Hoặc có thể hạn chế số lần thay thế qua tham số
import re
2:>>> s= "S23#"
>>> s1 = "WS23%"
>>> re.match[r"^[0-9[]%#+?=:._,!/-]*[A-Za-z][0-9[]%#+?=:._,!/-]*$", s]
>>> re.match[r"^[0-9[]%#+?=:._,!/-]*[A-Za-z][0-9[]%#+?=:._,!/-]*$", s1]
>>>
1Metacharacters
Metacharacters là những ký tự có ý nghĩa đặc biệt
search | Trả về một 0 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: |
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 | 2. Hàm search[] | Tìm kiếm khoảng trắng đầu tiên trong chuỗi: | Hoặc sẽ trả về None nếu không tìm thấy |
3. Hàm split[] | Tách các từ trong câu: | Chúng ta có thể chỉ định số lần xuất hiện qua tham số 1. Ví dụ tách chuỗi ở lần xuất hiện đầu tiên của khoảng trắng: |
|
4. Hàm sub[] | Thay thế mọi khoảng trắng bằng số 9: | Hoặc có thể hạn chế số lần thay thế qua tham số 2: | Metacharacters |
Metacharacters là những ký tự có ý nghĩa đặc biệt | Ký 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" | "123" |
. | Bất kỳ ký tự nào [ngoại trừ ký tự dòng mới] | "he..o" | "henno" |
^ | Bắt đầu chuỗi | "^hello" | "hello gua" |
$
Kết thúc chuỗi
search | Trả về một 0 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[] r"ain\b" | In ra tất cả những đoạn phù hợp: "He is Bi Rain" |
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 | 2. Hàm search[] | Tìm kiếm khoảng trắng đầu tiên trong chuỗi: r"ain\B" | Hoặc sẽ trả về None nếu không tìm thấy "No words are rains" |
3. Hàm split[] | Tách các từ trong câu: | 1. Hàm findall[] | In ra tất cả những đoạn phù hợp: |
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 | 2. Hàm search[] | Tìm kiếm khoảng trắng đầu tiên trong chuỗi: | Hoặc sẽ trả về None nếu không tìm thấy |
3. Hàm split[] | Tách các từ trong câu: | Chúng ta có thể chỉ định số lần xuất hiện qua tham số 1. Ví dụ tách chuỗi ở lần xuất hiện đầu tiên của khoảng trắng: |
|
4. Hàm sub[] | Thay thế mọi khoảng trắng bằng số 9: | Hoặc có thể hạn chế số lần thay thế qua tham số 2: | Metacharacters |
Metacharacters là những ký tự có ý nghĩa đặc biệt | Ký 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" | "123" |
.
Bất kỳ ký tự nào [ngoại trừ ký tự dòng mới]
"henno" | ^ |
Bắt đầu chuỗi | "^hello" |
"hello gua" | $ |
Kết thúc chuỗi | "world$" |
"helo world" | * |
Không hoặc nhiều lần xuất hiện | "aix*" |
"ai" | + |
Xuất hiện ít nhất một lần | "aix+" |
"aixxxx"
{}
Chính xác số lần xuất hiện
"aix{2}"
>>> s= "S23#"
>>> s1 = "WS23%"
>>> re.match[r"^[0-9[]%#+?=:._,!/-]*[A-Za-z][0-9[]%#+?=:._,!/-]*$", s]
>>> re.match[r"^[0-9[]%#+?=:._,!/-]*[A-Za-z][0-9[]%#+?=:._,!/-]*$", s1]
>>>
2"aixx"
>>> s= "S23#"
>>> s1 = "WS23%"
>>> re.match[r"^[0-9[]%#+?=:._,!/-]*[A-Za-z][0-9[]%#+?=:._,!/-]*$", s]
>>> re.match[r"^[0-9[]%#+?=:._,!/-]*[A-Za-z][0-9[]%#+?=:._,!/-]*$", s1]
>>>
3|
>>> s= "S23#"
>>> s1 = "WS23%"
>>> re.match[r"^[0-9[]%#+?=:._,!/-]*[A-Za-z][0-9[]%#+?=:._,!/-]*$", s]
>>> re.match[r"^[0-9[]%#+?=:._,!/-]*[A-Za-z][0-9[]%#+?=:._,!/-]*$", s1]
>>>
4Tổ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