【发布时间】:2020-02-23 18:59:03
【问题描述】:
我有一个字符串,其中的一部分包含在 html 标记中,主要是 span 和 strong。我想把它分成几部分,得到每个部分的文本、标签名和类属性
Take <span class="victoria line-text">Victoria line</span> to <strong>Highbury & Islington</strong>
所以对于上面的文字,我想提取 4 个部分。
var result = new MyObj[]
{
new MyObj{ Text="Take "},
new MyObj{ Text="Victoria line", Tag="span", ClassAttribute="victoria line-text" },
new MyObj{ Text=" to "},
new MyObj{ Text="Highbury & Islington", Tag="strong"},
};
这不是一个有效的 XML/HTML(只是一个文本,它的某些部分包含在标签中)所以我决定使用一些简单的正则表达式来解析我需要的值。 我设法使用此代码获取跨度信息
var str = "Take <span class=\"victoria line-text\">Victoria line</span> to <strong>Highbury & Islington</strong>";
Regex regex = new Regex("<span class=\"(.*?)\">(.*?)</span>");
if(regex.IsMatch(str))
{
MatchCollection collection = regex.Matches(str);
foreach(Match m in collection)
{
string text = m.Groups[2].Value; //Victoria line
string classes = m.Groups[1].Value; //victoria line-text
Console.WriteLine(text + " " + classes);
}
}
是否可以通过正则表达式获取所有部分的信息?
输入将包含纯文本,其中可能包含无效的未转义 html 字符(即 &、'"),只是其中的一部分包裹在 span 或 strong 标签中。XmlDocument 或其他库会抛出异常,因为它不是正确的 html。
【问题讨论】:
-
如果是 html 输入,为什么不使用 html 解析器?
-
我说它不包含在中,文本可以包含&
-
请阅读这个答案 - stackoverflow.com/a/1732454/33