Biểu thức chính quy để khớp với các thẻ html

Giả sử bạn nhận được một loạt tài liệu từ khách hàng. Các tài liệu này đã được xuất từ ​​một số CMS lỗi thời và chúng chứa đầy các thẻ HTML cũ (và có lẽ không hợp lệ). Những tài liệu này có nội dung tuyệt vời, vượt thời gian, nhưng chúng cần được làm sạch kỹ lưỡng, sau đó là một số định dạng mới (kiểu chữ). Có lẽ bạn muốn định dạng lại tài liệu bằng cách sử dụng markdown (.md)

Sẽ thật tệ nếu phải xóa tất cả HTML theo cách thủ công, phải không?

Bằng cách chạy biểu thức chính quy <[^<>]+> bên trong trình soạn thảo văn bản hoặc IDE của bạn, bạn có thể tìm thấy tất cả các thẻ HTML cùng một lúc. Sau đó, bạn có thể thay thế chúng ngay lập tức bằng cách nhấp vào nút Thay thế tất cả trong trình chỉnh sửa của mình

Video giới thiệu

Trong phần trình diễn ở trên, bạn thấy tôi làm như sau

  • Mở thanh tìm kiếm của VSCode
  • Dán biểu thức chính quy <[^<>]+>
  • Kích hoạt chức năng Sử dụng biểu thức chính quy
  • Nhấn enter để bắt đầu tìm kiếm
  • Thay thế tất cả các thẻ HTML bằng một chuỗi rỗng
  • Chọn tất cả văn bản của tôi, nhấp chuột phải và định dạng lại nó (không cần thiết, tôi chỉ làm điều đó cho có vẻ. )

Hãy cẩn thận. luôn tạo bản sao lưu của bất kỳ tệp nào trước khi bạn thực hiện các thay đổi lớn đối với tệp đó. Có thể tài liệu bạn đang dọn dẹp chứa một số URL có giá trị, URL này sẽ bị xóa nếu bạn thay thế các thẻ HTML bằng một chuỗi trống, như trong ví dụ trên

Bài viết này cho thấy cách bạn có thể trích xuất các thẻ HTML và nội dung bên trong các thẻ HTML bằng cách sử dụng biểu thức chính quy C# (regex)

Trích xuất các thẻ HTML từ các chuỗi có thể cực kỳ hữu ích khi phân tích cú pháp các trang web. Với regex, bạn có thể phân tích cú pháp các thẻ HTML, nội dung trong các thẻ HTML hoặc cả hai. Bài viết này giải thích ba trường hợp sử dụng này

Chỉ tìm các thẻ HTML

You can use the Matches() method from the Regex class to find all the HTML tags within a string. You can use the regular expression “<.*?>“ to do so. This regular expression matches anything that occurs between the opening and closing greater than and less than symbols.

Nếu một chuỗi chứa mẫu <>, thuộc tính đếm của phương thức Matches() trả về True. Sau đó, bạn có thể lặp qua tất cả các đối tượng Match trong bộ sưu tập Matches và truy cập chuỗi đã khớp thông qua thuộc tính value

Đây là một ví dụ. Trong tập lệnh bên dưới, phương thức Matches() khớp mở và đóng chữ đậm và đoạn văn

thẻ

Ghi chú. Bạn sẽ cần nhập “Hệ thống. Chữ. RegularExpressions” trước khi chạy tập lệnh bên dưới

 class Program
    {
        static void Main(string[] args)
        {
            string input = "This written in bold fonts. This is simple font again bold fonts. " +
                "This is 

paragraph

";            string regex = @"<.*?>";             var matches = Regex.Matches(input, regex);             if (matches.Count > 0)             {                Console.WriteLine("Match found:");                 foreach (Match m in matches)                 {                     Console.WriteLine(m.Value);                 }            }            Console.ReadLine();         }     }

đầu ra

Biểu thức chính quy để khớp với các thẻ html

Tìm thẻ HTML bao gồm nội dung

Bạn cũng có thể tìm các thẻ HTML và nội dung bên trong các thẻ HTML bằng cách sử dụng phương thức Match() và Matches(). Phương thức Match() tìm kiếm một lần xuất hiện

Hãy xem một ví dụ. Nếu bạn muốn tìm thẻ in đậm và nội dung bên trong thẻ này, bạn có thể sử dụng biểu thức regex “\s(. +?)\s”. Biểu thức regex này khớp với bất kỳ thứ gì xảy ra trong các thẻ in đậm mở và đóng

Nếu tìm thấy kết quả phù hợp, thuộc tính Thành công của phương thức Match() trả về true. Trong trường hợp đó, bạn có thể truy cập giá trị phù hợp thông qua thuộc tính Giá trị. Đây là một kịch bản mẫu

 class Program
    {
        static void Main(string[] args)
        {
            string input = "This written in bold fonts. This is simple font";
            string regex = @"\s*(.+?)\s*";
            var match = Regex.Match(input, regex);
            if (match.Success == true)
            {
                Console.WriteLine("Match found");
                Console.WriteLine(match.Value);
            }
            Console.ReadLine();
        }
    }

đầu ra

Biểu thức chính quy để khớp với các thẻ html

Nếu bạn muốn tìm kiếm nhiều thẻ trong một chuỗi, bạn có thể sử dụng phương thức Matches() trả về một tập hợp các đối tượng lớp Match. Sau đó, bạn có thể truy cập tất cả các đối sánh được gắn thẻ thông qua các thuộc tính giá trị của tất cả các đối tượng phù hợp

Tập lệnh bên dưới tìm kiếm tất cả các thẻ in đậm trong chuỗi đầu vào

 class Program
    {
        static void Main(string[] args)
        {
            string input = "This written in bold fonts. This is simple font again bold fonts";
            string regex = @" \s*(.+?)\s*";
            var matches = Regex.Matches(input, regex);
            if (matches.Count > 0)
            {
                Console.WriteLine("Match found:");
                foreach (Match m in matches)
                {
                    Console.WriteLine(m.Value);
                }
            }
            Console.ReadLine();
        }
    }

đầu ra

Biểu thức chính quy để khớp với các thẻ html

Trong kết quả ở trên, bạn có thể thấy rằng các thẻ cùng với nội dung được tìm thấy

Tìm nội dung trong thẻ HTML

Cuối cùng, bạn cũng có thể chỉ tìm thấy nội dung trong các thẻ HTML. Để làm như vậy, bạn có thể sử dụng phương thức Match(). Biểu thức chính quy được sử dụng cho mục đích này là “\s(. +?)\s”. Biểu thức chính quy này sẽ khớp với bất cứ điều gì xảy ra trong các phông chữ đậm mở và đóng

Các thẻ HTML sẽ được lưu trữ tại chỉ mục đầu tiên của bộ sưu tập Nhóm, đây là một thuộc tính của đối tượng Match. Nội dung có thể được truy cập bằng cách lập chỉ mục chỉ mục thứ hai (chỉ mục được tham chiếu bởi 1)

Nhìn vào kịch bản dưới đây chẳng hạn

class Program
    {
        static void Main(string[] args)
        {
            string input = "This written in bold fonts. This is simple font";
            string regex = @"\s*(.+?)\s*";
            var match = Regex.Match(input, regex);
            if (match.Success == true)
            {
                Console.WriteLine("Match found");
                Console.WriteLine(match.Groups[1].Value);
            }
            Console.ReadLine();
        }
    }

đầu ra

Biểu thức chính quy để khớp với các thẻ html

Ở đầu ra của đoạn script trên, bạn chỉ có thể thấy nội dung từ thẻ HTML được in trên bảng điều khiển

Cuối cùng, bạn có thể tìm thấy nội dung từ nhiều thẻ HTML. Để làm như vậy, bạn có thể sử dụng phương thức Matches() với cùng biểu thức chính quy mà bạn đã thấy trong tập lệnh trước. Đây là một ví dụ về cách làm điều đó

Làm cách nào để tìm các thẻ HTML bằng regex?

Bạn có thể sử dụng phương thức Matches() từ lớp Regex để tìm tất cả các thẻ HTML trong một chuỗi . Bạn có thể sử dụng biểu thức chính quy “

Bạn có thể sử dụng các biểu thức chính quy trong HTML không?

Nói tóm lại, các biểu thức chính quy có thể được sử dụng để khớp các thẻ HTML và trích xuất dữ liệu trong tài liệu HTML

Làm cách nào để loại trừ các thẻ HTML trong regex?

Dưới đây là biểu thức chính quy đơn giản để xác thực chuỗi theo mẫu thẻ HTML. Điều này sau này có thể được sử dụng để xóa tất cả các thẻ và chỉ để lại văn bản. / Thử đi.

Làm cách nào để sử dụng regex trong tệp HTML?

Một cách đơn giản để phân tích cú pháp HTML là sử dụng các biểu thức chính quy để liên tục tìm kiếm và trích xuất các chuỗi con khớp với một mẫu cụ thể . Chúng ta có thể xây dựng một biểu thức chính quy được định dạng tốt để khớp và trích xuất các giá trị liên kết từ văn bản trên như sau. href="http. //. +?"