1. Trang chủ
  2. » Cao đẳng - Đại học

Chuyên đề Regular Expression trong C HowKtea khóa học lập trình cơ bản | Toán học, Lớp 12 - Ôn Luyện

60 55 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

con thành các group và đặt tên cho chúng như vậy khi lấy được 1 chuỗi kết quả ta muốn lấy các thành phần con bên trong đó thì ta chỉ cần gọi chúng thông qua tên đã đặt. Bạn có thể khôn[r]

(1)

KHÓA C# CƠ BẢN HOWKTEAM.COM 1 | 60

Bài 28: REGULAR

EXPRESSION TRONG C#

Xem học website để ủng hộ Kteam:Regular Expression C#

Mọi vấn đề lỗi website làm ảnh hưởng đến bạn thắc mắc, mong muốn khóa học mới, nhằm hỗ trợ cải thiện Website Các bạn vui lòng phản hồi đến Fanpage How Kteam nhé!

Dẫn nhập

Regular Expression hay tiếng Việt gọi Biểu thức quy, cấu trúc mạnh để mơ tả chuỗi theo cách thống chung

Regular Expression bao gồm tập hợp ký tự, toán tử hay ký hiệu toán học nhằm biểu thị chuỗi theo cấu trúc chung mà người học theo Có thể xem Regular Expression loại tiếng lóng dùng chung lập trình Bạn trích lọc hay nhiều chuỗi có cấu trúc chung từ đoạn văn hay chuỗi

Bạn tìm kiếm, thay đổi nội dung chuỗi cách dễ dàng Thay phải ngồi cắt chuỗi mỏi mệt trước

Từ đây, với Regular Expression Bạn hồn tồn trích lọc liệu từ đoạn html theo ý

Cùng tìm hiểu cách sử dụng Regular Expression với Kteam

Nội dung

Để đọc hiểu tốt bạn nên có kiến thức phần:

(2)

Copyright © Howkteam.com

 Có khả tìm kiếm thêm thơng tin internet tốt

Trong học này, tìm hiểu vấn đề:

 Các ký hiệu Regular Expression

 Một số lớp hỗ trợ Regular Expression

Các ký hiệu Regular Expression Trước tìm hiểu ký hiệu xem qua ví dụ mẫu để nắm cấu trúc chung Regular Expression

Chuỗi mẫu:

-howkteam.com-10092016- Pattern:

\d{8}

Kết tìm kiếm: 10092016 Một cách nhìn khác:

-howkteam.com-10092016- Hay cách dễ nhớ

(3)

KHÓA C# CƠ BẢN HOWKTEAM.COM 3 | 60 Trong

\d ký hiệu biểu thị cho số

{8} biểu thị ký tự trước xuất lần

Vậy đọc câu pattern là: Tìm chuỗi dãy số liên tiếp

>>> kết trùng khớp

Nếu bạn thay số thành số tức pattern thành : \d{6}

Thì kết thành 100920 hay -howkteam.com-10092016- Hay cách dễ nhớ

-howkteam.com-\d{6}16-

Hay mường tượng Regular Expression như string.Format

Từ bạn nhận thấy Regular Expression chất tìm nhiều chuỗi thỏa mãn cấu trúc chung định

Hay hiểu cách khác Regular Expression tập khn mẫu định dạng chuỗi Nhằm tìm kiếm chuỗi cách dễ dàng từ cấu trúc định dạng (@@ đọc ngu người Thôi tốt khơng nên đọc dịng Xóa dịng khỏi não nha người)

(4)(5)

KHÓA C# CƠ BẢN HOWKTEAM.COM 5 | 60

Mình dùng phần mềm RegEx tester để demo cho bạn xem cách dùng Regular Expression

Link tải phần mềm cuối viết (Tại website www.howteam.com)

Pattern

Đại diện cho ký tự Ngoại trừ ký hiệu \n Chuỗi mẫu:

(6)

Copyright © Howkteam.com

Kết quả:

Danh sách ký tự xuất chuỗi mẫu: {-,h,o,w,k, ,1,6,-} Cách nhìn khác:

(7)

KHÓA C# CƠ BẢN HOWKTEAM.COM 7 | 60

Pattern \d

(8)

Copyright © Howkteam.com -howkteam.com-10092016-

Pattern: \d Kết quả:

Danh sách số xuất chuỗi mẫu: {1,0,0,9,2,0,1,6} Cách nhìn khác:

(9)

KHĨA C# CƠ BẢN HOWKTEAM.COM 9 | 60

Pattern \D

(10)

Copyright © Howkteam.com -howkteam.com-10092016-

(11)

KHÓA C# CƠ BẢN HOWKTEAM.COM 11 | 60

Pattern \s

(12)

Copyright © Howkteam.com -howkteam.com 10092016-

Pattern:

(13)

KHÓA C# CƠ BẢN HOWKTEAM.COM 13 | 60

Pattern \S

(14)

Copyright © Howkteam.com Chuỗi mẫu:

-howkteam.com 10092016- Pattern:

(15)

KHÓA C# CƠ BẢN HOWKTEAM.COM 15 | 60

Pattern \w

(16)

Copyright © Howkteam.com Chuỗi mẫu:

-howkteam.com 10092016- Pattern:

(17)

KHÓA C# CƠ BẢN HOWKTEAM.COM 17 | 60

(18)

Copyright © Howkteam.com Ký tự khơng phải word Tương đương phủ định \w hay [^a-zA-Z_0-9] Chuỗi mẫu:

-howkteam.com 10092016- Pattern:

(19)

KHÓA C# CƠ BẢN HOWKTEAM.COM 19 | 60

Pattern ^

(20)

Copyright © Howkteam.com -howkteam.com 10092016-

Pattern:

(21)

KHÓA C# CƠ BẢN HOWKTEAM.COM 21 | 60

(22)

Copyright © Howkteam.com Kết thúc chuỗi hay dòng

Chuỗi mẫu:

-howkteam.com 10092016- Pattern:

(23)

KHÓA C# CƠ BẢN HOWKTEAM.COM 23 | 60

(24)

Copyright © Howkteam.com -howkteam.com 10092016-

Pattern:

(25)

KHÓA C# CƠ BẢN HOWKTEAM.COM 25 | 60

(26)

Copyright © Howkteam.com -howkteam.com 10092016-

(27)

KHÓA C# CƠ BẢN HOWKTEAM.COM 27 | 60

Pattern |

(28)

Copyright © Howkteam.com -howkteam.com 10092016-

Pattern:

(29)

KHÓA C# CƠ BẢN HOWKTEAM.COM 29 | 60

Pattern [abc]

(30)

Copyright © Howkteam.com -howkteam.com 10092016-

(31)

KHÓA C# CƠ BẢN HOWKTEAM.COM 31 | 60

Pattern [a-z]

(32)

Copyright © Howkteam.com Chuỗi mẫu:

-howkteam.com 10092016- Pattern:

(33)

KHÓA C# CƠ BẢN HOWKTEAM.COM 33 | 60

Pattern [^abc]

(34)

Copyright © Howkteam.com -howkteam.com 10092016-

Pattern:

(35)

KHÓA C# CƠ BẢN HOWKTEAM.COM 35 | 60

Pattern ()

(36)

Copyright © Howkteam.com -howkteam.com 10092016-

Pattern:

([0-3])|([5-7])

(37)

KHÓA C# CƠ BẢN HOWKTEAM.COM 37 | 60

Pattern ?

(38)

Copyright © Howkteam.com -howkteam.com 10092016-

Lấy tất số xuất hay lần Pattern:

(39)

KHÓA C# CƠ BẢN HOWKTEAM.COM 39 | 60

Pattern *

(40)

Copyright © Howkteam.com -howkteam.com 10092016-

(41)

KHÓA C# CƠ BẢN HOWKTEAM.COM 41 | 60

Pattern +

(42)

Copyright © Howkteam.com -howkteam.com 10092016-

(43)

KHÓA C# CƠ BẢN HOWKTEAM.COM 43 | 60

Pattern {n}

(44)

Copyright © Howkteam.com -howkteam.com 10092016-

Pattern: 0{2}

(45)

KHÓA C# CƠ BẢN HOWKTEAM.COM 45 | 60

Pattern {n,}

(46)

Copyright © Howkteam.com -howkteam.com 10092016-

(47)

KHÓA C# CƠ BẢN HOWKTEAM.COM 47 | 60

Pattern {m,n}

(48)

Copyright © Howkteam.com -howkteam.com 100010092016-

Pattern:

(49)

KHÓA C# CƠ BẢN HOWKTEAM.COM 49 | 60

(50)

Copyright © Howkteam.com

Match MatchCollection

Khi áp dụng biểu thức quy tắc lên chuỗi mẫu kết trả nhiều chuỗi thoả mãn biểu thức quy tắc Khi chuỗi lưu vào tập hợp có tên MatchCollection, phần tử tập hợp biến có kiểu Match

MatchCollection kiểu tập hợp chứa danh sách đối tượng kiểu Match Vì tập hợp bình thường nên thao tác tập hợp khác

Một đối tượng kiểu Match chứa chuỗi kết quả, để xem chuỗi kết ta gọi phương thức ToString() Ngồi có thuộc tính phương thức khác như:

Ví dụ sử dụng Match MatchCollection:

(51)

KHÓA C# CƠ BẢN HOWKTEAM.COM 51 | 60 Nếu bạn viết code đơn gian này:

Regex reg = new Regex(@"\d");

Match result = reg.Match("-howkteam.com 10092016-"); Console.WriteLine(result.ToString());

Thì kết sau:

Chúng ta mong muốn lấy tất số khơng phải số này! Đến có bạn làm sau:

Regex reg = new Regex(@"\d"); // Tạo đối tượng Regex chứa pattern Match result = reg.Match("-howkteam.com 10092016-"); // Tạo đối tượng Match để chứa kết

{

Console.WriteLine(result.ToString());

result = result.NextMatch(); // Chuyển qua kết trùng khớp }

while (result != Match.Empty); // Kiểm tra xem hết kết trùng khớp chưa

(52)

Copyright © Howkteam.com Kết ý ta thấy code không gọn gàng thời gian xử lý chỗ hàm NextMatch()

Đến ta thử sử dụng MatchCollection NET hỗ trợ sẵn xem nào:

Regex reg = new Regex(@"\d");

foreach (Match item in reg.Matches("-howkteam.com 10092016-")) {

Console.WriteLine(item.ToString()); }

Để ý lúc ta dùng hàm Matches() để lấy kết Match() Matches() trả tập hợp đối tượng Match (MatchCollection) nên ta dùng foreach để duyệt tập hợp (cú pháp foreach bạn tham khảo FOREACH TRONG C# series LẬP TRÌNH C# CƠ BẢN)

(53)

KHÓA C# CƠ BẢN HOWKTEAM.COM 53 | 60

Lưu ý:

Nếu khơng tìm thấy chuỗi phù hợp trả đối tượng Match có giá trị rỗng khơng phải null Khi để kiểm tra có giá trị hay khơng ta sử dụng:

if (result == Match.Empty) {

// Câu lệnh }

Group GroupCollection

Group Regular Expression cách ta gom nhóm biểu thức lại thành cụm đặt tên cho nhóm để dễ quản lý thao tác

Lớp Group lớp đại diện cho gom nhóm biểu thức Có điểm nên biết lớp Group lớp cha lớp Match!

(54)

Copyright © Howkteam.com

 Trong kết trùng khớp chứa nhiều thông tin khác

và ta mong muốn thể lấy thành phần nhỏ mà khơng phải dùng thêm biểu thức quy

 Và biểu thức quy ban đầu ta gom nhóm thành phần

con thành group đặt tên cho chúng lấy chuỗi kết ta muốn lấy thành phần bên ta cần gọi chúng thông qua tên đặt

Cú pháp:

(?<tên group>) Trong đó:

( ): cú pháp gom nhóm biểu thức

?<tên group>: cú pháp đặt tên cho group Bạn khơng đặt tên cho group Lưu ý tên group bạn phải viết liền không dấu nên tuân theo quy tắc đặt tên

Ví dụ:

Để lấy chuỗi phút giây ta làm sau:

“\d+:\d+:\d+”

Nhưng muốn lấy giờ, phút, giây riêng để xử lý phải làm sao?

Nếu viết biểu thức dài dịng Khi ta sử dụng group đặt tên cho chúng sau:

(?<hours>\d+):(?<minutes>\d+):(?<seconds>\d+)

(55)

KHÓA C# CƠ BẢN HOWKTEAM.COM 55 | 60 Để lấy danh sách gom nhóm chuỗi kết ta dùng thuộc tính “Groups” lớp Match Thuộc tính trả GroupCollection GroupCollection lớp chứa danh sách gom nhóm biểu thức, phần tử danh sách đối tượng kiểu Group

Ví dụ sử dụng Group GroupCollection:

// Tạo biểu thức Regex re = new

Regex(@"(?<hours>\d+):(?<minutes>\d+):(?<seconds>\d+)"); /*

* Duyệt qua kết trùng khớp

* Lấy giá trị group thông qua số phần tử tên group đặt biểu thức

*/

foreach (Match item in re.Matches("30/04/2017 10:15:12 192.168.1.2")) {

Console.WriteLine(" Match: " + item.ToString()); Console.WriteLine(" Hours: " + item.Groups["hours"]); Console.WriteLine(" Minutes: " + item.Groups["minutes"]); Console.WriteLine(" Seconds: " + item.Groups["seconds"]); }

(56)

Copyright © Howkteam.com NET hỗ trợ truy xuất phần tử danh sách

GroupCollection thông qua số phần tử tên group đặt biểu thức

Capture CaptureCollection

Mỗi tìm thấy chuỗi (bao gồm group) C# bắt lại lưu vào đối tượng có kiểu Capture Và danh sách tất Capture CaptureCollection

Một điểm cần biết Capture lớp cha lớp Group!

Tại lại có lớp Capture này? – Câu trả lời nằm tình sau:

 Cho chuỗi sau “10:30:15 IBM 192.168.1.2 INTEL” viết biểu thức lấy

giờ phút giây, địa ip tên cơng ty Lúc ta có biểu thức sau:

“(?<times>(\d|:)+)\s(?<company>\S+)\s(?<ip>(\d|\.)+)\s(?<comp any>\S+)”

Lưu ý: khơng tập trung vào giải thích chi tiết biểu thức mà tập trung vào cách sử dụng lớp

Ở có tên cơng ty bên nên đặt chung tên group company với mong muốn lấy tên cơng ty từ group

Chương trình kiểm tra:

Regex RE = new Regex(@"(?<times>(\d|:)+)\s" + @"(?<company>\S+)\s" + @"(?<ip>(\d|\.)+)\s" + @"(?<company>\S+)");

foreach (Match item in RE.Matches("10:30:15 IBM 192.168.1.2 INTEL")) {

Console.WriteLine(" time: " + item.Groups["times"]);

Console.WriteLine(" company: " + item.Groups["company"]); Console.WriteLine(" ip: " + item.Groups["ip"]);

(57)

KHÓA C# CƠ BẢN HOWKTEAM.COM 57 | 60

}

Nhưng chạy chương trình kết lại này:

Ta thấy có tới công ty thoả mãn INTEL IBM chương trình in INTEL Chúng ta kiểm tra phần mềm RegEx Tester để biểu thức viết đúng:

(58)

Copyright © Howkteam.com Đến có bạn nói không đổi tên group khác xong? Câu trả lời ví dụ có cơng ty giả sử có đến 100 cơng ty chuỗi sao? Bạn phải đặt 100 biến khác nhau?

Vì tận dụng đặc điểm Capture sử dụng chúng để giải

Chương trình sau:

Regex RE = new Regex(@"(?<times>(\d|:)+)\s" + @"(?<company>\S+)\s" + @"(?<ip>(\d|\.)+)\s" + @"(?<company>\S+)");

foreach (Match item in RE.Matches("10:30:15 IBM 192.168.1.2 INTEL")) {

Console.WriteLine(" time: " + item.Groups["times"]); Console.WriteLine(" ip: " + item.Groups["ip"]); Console.Write(" company: ");

/*

Lấy tất capture bắt group company duyệt chúng

* Sau ta sử dụng hàm ToString() thuộc tính Value để lấy giá trị Capture

*/

foreach (Capture i in item.Groups["company"].Captures) {

Console.Write(i.ToString() + " "); }

}

Ở để lấy danh sách Capture (CaptureCollection) ta sử dụng thuộc tính Captures

(59)

KHĨA C# CƠ BẢN HOWKTEAM.COM 59 | 60

Tải phần mềm

Bạn tải phần mềm RegEx tester link bên dưới:

Kết luận

Nội dung giúp bạn nắm được:

 Các ký hiệu Regular Expression

 Một số lớp hỗ trợ Regular Expression

(60) KHÓA C# CƠ BẢN HOWKTEAM.COM Regular Expression C# e www.howteam.com FOREACH TRONG C# LẬP TRÌNH C# CƠ BẢN CRAWL DATA TỪ WEBSITE

Ngày đăng: 21/04/2021, 23:20

Xem thêm:

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w