解析来自 HTML 标记的文本

本文关键字:文本 HTML | 更新日期: 2023-09-27 17:55:17

我在常规文本文件中有大约 27,000 个以下标记的条目:

<li class="active-result group-option" data-option-array-index="4">Microsoft Power BI</li>

我唯一需要的就是(在这种情况下)

Microsoft Power BI

使用 C#,我尝试了字符串拆分选项(从名为 select.txt 的文件中读取),但是,我还没有设法完成这项任务。有什么想法吗?

解析来自 HTML 标记的文本

我知道

有人会因为使用xml读取html而给我负分。 但在这种情况下,它工作得很好。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Xml.Linq;
using System.IO;
namespace ConsoleApplication2
{
    class Program
    {
        static void Main(string[] args)
        {
            string text = "<li class='"active-result group-option'" data-option-array-index='"4'">Microsoft Power BI</li>";
            //use only for reading from string.
            StringReader reader = new StringReader(text);
            List<string> data = new List<string>();
            //for reading from file use XmlReader.Create(filename);
            XmlReader xReader = XmlReader.Create(reader);
            while(!xReader.EOF)
            {
                if(xReader.Name != "li")
                {
                    xReader.ReadToFollowing("li");
                }
                if(!xReader.EOF)
                {
                    data.Add(xReader.ReadInnerXml());
                }
            }
        }
    }
}

做这样一件小事最理想的方法是正则表达式。

在文件顶部添加:

using System.Text.RegularExpressions;

然后使用此正则表达式捕获所需的所有值

string input = ReadSomethingFromFile(); // input is the raw data you are trying to read
MatchCollection matches = Regex.Matches(input, "<li class='"active-result group-option'"[^<]+>([^<]+)</li>");
// Loop through all matched elements
forEach(Match m in matches) {
    string capturedString = m.Captures[0].Value;
    // Do something with capturedString
}

如果您计划稍后在程序中添加更多功能,则应使用适当的 html 解析库。但是,如果您只打算做一件事,正则表达式是最简单的选择。