正确使用正则表达式提取单词

时间:2019-08-27 01:24:04

标签: c# html asp.net regex strip

我有一个ASP.NET Core项目,需要我从网站上读取响应并提取特定单词。

我尝试过的是用空白替换标签,然后删除标签。不幸的是,我对此一无所知。有什么更好的方法?

我想从这些html标记中提取Toyota

<tr>
<td class="text-muted">Car Model</td>
<td><strong>Toyota 2015</strong></td>
</tr>

我尝试过:

var documentSource = streamReader.ReadToEnd();
//removes html content
Regex remove = new Regex(@"<[^>].+?>");
var strippedSource = remove.Replace(documentSource.Replace("\n", ""), "");
//convert to array
string[] siteContextArray = strippedSource.Split(',');
//matching string
var match = new Regex("Car Model ([^2015]*)");

List<Model> modelList = new List<Model>();
Model model = new Model();

foreach (var item in siteContextArray)
{
    var wordMatch = match.Match(item);
    if (wordMatch.Success)
    {
        model.Add(
            new Model
            {
                CarModel = wordMatch.Groups[1].Value
            }
        );
    }
}
return modelList;

1 个答案:

答案 0 :(得分:0)

使用NuGet检索解决方案上的HTML Agility Pack

用法

var html = @"
<tr>
    <td class=""text-muted"">Car Model</td>
    <td><strong> Toyota 2015 </strong></td>
</tr>
<tr>
    <td class=""text-muted"">Car Model</td>
    <td><strong> Toyota 2016 </strong></td>
</tr>";

var htmlDoc = new HtmlDocument();
htmlDoc.LoadHtml(html);
var models = htmlDoc.DocumentNode
    .SelectNodes("//tr/td[text()='Car Model']")
    .Select(node => node.SelectSingleNode("following-sibling::*[1][self::td]").InnerText);

顺便说一句,我认为在诸如content的内容元素上添加CSS类会很好

<td class="car-model"><strong> Toyota 2016 </strong></td>

这将使html更有意义并且更易于提取。