解析来自 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
的文件中读取),但是,我还没有设法完成这项任务。有什么想法吗?
我知道
有人会因为使用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 解析库。但是,如果您只打算做一件事,正则表达式是最简单的选择。