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

Posted

技术标签:

【中文标题】正确使用正则表达式提取单词【英文标题】:Correctly use regular expressions to extract word 【发布时间】:2019-12-31 03:49:55 【问题描述】:

我有一个 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;

【问题讨论】:

请不要使用正则表达式来解析 HTML,而是使用 HTML 解析器。 嗨@TimBiegeleisen 很高兴你提到了这一点。我从未听说过 HTML 解析器。我将如何处理这个问题? 关于使用正则表达式解析的明确答案:***.com/a/1732454/4665 .net 的 goto HTML 解析器是 HTML Agility Pack 【参考方案1】:

使用 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);

顺便说一句,我认为在内容元素上添加css类会很好

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

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

【讨论】:

非常感谢您对我的帮助。我已经尝试了您的代码,但它没有按预期工作。我需要这样进入课堂吗? //tr/td[text-muted='Car Model']

以上是关于正确使用正则表达式提取单词的主要内容,如果未能解决你的问题,请参考以下文章

BigQuery 正则表达式提取

在js中使用正则表达式从字符串中提取单词

如何使用正则表达式提取骆驼大小写字符串的所有单词?

提取单词和单词之前,并在正则表达式中的“_”之间插入

正则表达式提取路径中的单词

如何使用JavaScript正则表达式提取字符串中的最后一个单词?