【问题标题】:How to get specific content (Regex C#)如何获取特定内容(Regex C#)
【发布时间】:2016-03-05 00:37:35
【问题描述】:

我在 C# 中使用正则表达式并有以下字符串:

<tr>
<td class="uk-text-bold">Hello</td>
</tr>
<tr>
<td class="uk-text-bold">World</td>
</tr>

使用这种模式:
&lt;td class=\"uk-text-bold\"&gt;(.+?)&lt;/td&gt;

我试图只得到“Hello”和“World”,所以括号中的所有内容,但它一直返回整行,我被卡住了。

我能得到一些建议吗?

正则表达式here

提前致谢。

【问题讨论】:

  • 不要使用正则表达式,使用 HtmlAgilityPack 或类似的东西。

标签: c# html regex parsing


【解决方案1】:

你的表情没问题。因此,如果您确实需要使用 Regex,我建议您使用命名组而不是编号组,然后遍历匹配项并处理该命名组。例如:

var pattern = @"<td class=\""uk-text-bold\"">(?<mostwanted>.+?)</td>";
var input = @"<tr>
<td class=""uk-text-bold"">Hello</td>
</tr>
<tr>
<td class=""uk-text-bold"">World</td>
</tr>";

var regex = new Regex(pattern, RegexOptions.Multiline);

var matches = regex.Matches(input);

foreach (var mostwanted in matches
  .Cast<Match>()
  .Select(t1 => t1.Groups["mostwanted"].Value))
{
  Console
   .WriteLine(mostwanted);
}

但是,正如其他人所说,更好的方法是使用一些 html 解析器(HtmlAgilityPack 非常好)。因为,如果您的 html 代码在标签之间包含空格或者会有一些不需要的返回,那么您的正则表达式就会被破坏。

【讨论】:

  • 他使用的编号组同样有效;他只需要知道如何访问它。此外,没有要求 Multiline 选项。它所做的只是将锚(^$)的含义从整个字符串边界更改为行边界,并且正则表达式中没有锚。
【解决方案2】:

拥有Match m 后,请使用m.Groups[1].Value 而不是m.Value。每对括号定义一个新组。

但要告诉你应该如何真正做到这一点,请使用 HTML 解析库来解析 HTML,而不是正则表达式。

【讨论】:

    【解决方案3】:

    你的正则表达式很好。要获得您的价值,您必须遍历组

    要解析 Html,您应该使用专用库而不使用正则表达式。您可以在这里查看使用 HTML 敏捷包:http://www.c-sharpcorner.com/UploadFile/9b86d4/getting-started-with-html-agility-pack/

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-14
      • 2012-12-13
      • 2019-10-16
      • 2019-05-05
      • 1970-01-01
      • 2017-08-16
      相关资源
      最近更新 更多