Kết nối

[LINQ và chuỗi] Phần 4: Kết hợp LINQ và biểu thức chính quy (C#)

6.065 lượt xem 
 

Trong bài này, chúng ta sử dụng lớp Regex để tạo 1 biểu thức chính quy cho việc so khớp các chuỗi văn bản. Truy vấn LINQ cho phép lọc chính xác các kết quả với biểu thức chính quy, từ đó tạo ra các kết quả mong muốn.

Ví dụ sau chúng ta có 1 danh sách List chứa các phần tử kiểu String, gồm 4 chuỗi là “Learn C”, “Code C++”, “Web Design” và “C# with LINQ”. Yêu cầu đặt ra là chúng ta tìm kiếm các phần tử có chứa C hoặc C++ hoặc C#, như vậy nếu nhìn trực quan chúng ta có được 3 phần tử đó là: “Learn C”,”Code C++”, và “C# with LINQ”. Tuy nhiên để thực hiện LINQ thuần thì câu lệnh có thể dài, chúng ta có thể kết hợp với biểu quyết thức chính quy như đoạn mã dưới đây.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading.Tasks;

namespace LINQ2String
{
    class Program
    {
        static void Main(string[] args)
        {
            // Danh sách các phần tử kiểu chuỗi --- dammio.com
            List<string> list = new List<string>() { "Learn C", "Code C++", "Web Design", "C# with LINQ" };

            // Biểu thức chính quy tìm các chuỗi có chứa C, C++ hoặc C#
            System.Text.RegularExpressions.Regex re = new Regex(@"(C#|C|C\+\+)");

			// Phương thức IsMatch trả về kiểu bool 
			// cho biết giá trị đầu vào thỏa điều kiện hay không?
            var query = from li in list
                        where re.IsMatch(li) 
                        select li;

            Console.WriteLine("Cac phan tu co chua tu khoa C, C++ và C# là: "); 

            // Kết quả
            foreach(var item in query)
            {
                Console.WriteLine(item);  
            }

            Console.WriteLine("Nhan bat ky nut nao de thoat!");
            Console.ReadKey(); 
        }

    }
}

Lớp Regex được dùng để tạo ra biểu thức chính quy, nằm ở namespace System.Text.RegularExpressions. Dựa theo phương thức IsMatch và biến phạm vi li, chúng ta có thể kiểm tra từng phần tử trong danh sách thỏa điều kiện và tạo ra danh sách kết quả và xuất ra màn hình.

Liên quan:  [LINQ] Phần 6: Cú pháp truy vấn và cú pháp phương thức trong LINQ (C#)

Nếu bạn vẫn muốn dùng LINQ thuần mà không dùng biểu thức chính quy, bạn vẫn có thể thực hiện được, tuy nhiên câu lệnh cho thể dài hơn 1 chút. Tuy nhiên, trong nhiều trường hợp, biểu thức chính quy giúp xử lý điều kiện đa dạng hơn.

// Câu lệnh truy vấn
var query = from li in list
			where li.Contains("C") || li.Contains("C++") || li.Contains("C++")
			select li;

Kết luận: Bài viết đã đưa ra 1 ví dụ nhỏ về cách kết hợp giữa LINQ và biểu thức chính quy. Các bạn nên tìm hiểu sâu thêm về biểu thức chính quy để có nhiều lựa chọn trong việc xử lý chuỗi nhé.

Trích dẫn bài viết
  • APA:
    Dammio. (2017). [LINQ và chuỗi] Phần 4: Kết hợp LINQ và biểu thức chính quy (C#). https://www.dammio.com/2017/04/22/linq-va-chuoi-phan-4-ket-hop-linq-va-bieu-thuc-chinh-quy-c.
  • BibTeX:
    @misc{dammio,
    author = {Dammio},
    title = {[LINQ và chuỗi] Phần 4: Kết hợp LINQ và biểu thức chính quy (C#)},
    year = {2017},
    url = {https://www.dammio.com/2017/04/22/linq-va-chuoi-phan-4-ket-hop-linq-va-bieu-thuc-chinh-quy-c},
    urldate = {2024-03-28}
    }
Theo dõi
Thông báo của
guest
1 Bình luận
Cũ nhất
Mới nhất Được bỏ phiếu nhiều nhất
Phản hồi nội tuyến
Xem tất cả bình luận
1
0
Rất thích suy nghĩ của bạn, hãy bình luận.x