正确使用正则表达式提取单词
Correctly use regular expressions to extract word
我有一个 ASP.NET 核心项目,需要我读取网站的响应并提取某个词。
我尝试过将标签替换为白色 space,然后删除标签。不幸的是,我对此一无所知。什么是更好的方法?
我想从这些 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;
使用 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 class 会很好,例如
<td class="car-model"><strong> Toyota 2016 </strong></td>
这将使 html 更有意义并且更容易提取。
我有一个 ASP.NET 核心项目,需要我读取网站的响应并提取某个词。
我尝试过将标签替换为白色 space,然后删除标签。不幸的是,我对此一无所知。什么是更好的方法?
我想从这些 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;
使用 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 class 会很好,例如
<td class="car-model"><strong> Toyota 2016 </strong></td>
这将使 html 更有意义并且更容易提取。