【问题标题】:Parse HTML with Regex and C# [duplicate]使用正则表达式和 C# 解析 HTML [重复]
【发布时间】:2014-04-27 21:48:09
【问题描述】:

我有这样的 HTML 代码:

<tr class="discussion r0"><td class="topic starter"><a href="SITE?d=6638">Test di matematica</a></td>

我只需要选择“Test di matematica”,我想用正则表达式来做到这一点。 我试过了:

 string pattern= "<tr class=\"discussion r0\"><td class=\"topic starter\"><a href=\"" + site + "=d{1,4}\"" + ">\\s*(.+?)\\s*</a></td>";

但它不起作用..我可以在表达式之后和其他表达式之前选择单词吗?

编辑:你能告诉我如何使用 HTMLAgility 来解析这个字符串吗? 谢谢。

【问题讨论】:

  • HtmlAgilityPack...然后关闭...
  • 完全不可能吗?有了这个: string patternTitolo = "d=\\d{1,4}\">\\s*(.+?)\\s*"; 工作一点..跨度>
  • @user3579313 这是“误导”和“脆弱”的。不应使用正则表达式解析 HTML - 当存在现有解决方案时,使用不适当的工具是一种严重的黑客攻击。

标签: c# html regex parsing


【解决方案1】:

此正则表达式确保我们捕获的文本位于&lt;a 标记内,而&lt;td 标记位于&lt;tr 标记内。

using System;
using System.Text.RegularExpressions;
class Program {
static void Main() {

string s1 = "<tr class=\"discussion r0\"><td class=\"topic starter\"><a href=\"SITE?d=6638\">Test di matematica</a></td>";
var r = new Regex(@"(?i)<tr[^>]*?>\s*<td[^>]*?>\s*<a[^>]*?>([^<]*)<", RegexOptions.IgnoreCase);
string capture = r.Match(s1).Groups[1].Value;
Console.WriteLine(capture);
Console.WriteLine("\nPress Any Key to Exit.");
Console.ReadKey();
} // END Main
} // END Program

输出: Test di matematica

【讨论】:

  • @user3579313 太棒了。谢谢你告诉我。
  • 请告诉我如何编辑您的正则表达式以便仅在标签 内捕获文本?我正在尝试 (?i)]*?>([^ 但不起作用...
  • @user3579313 (?i)&lt;tr&gt;([^&lt;]*)&lt;/tr&gt;
【解决方案2】:

试试这个:

string myString = "<tr class=\"discussion r0\"><td class=\"topic starter\"><a href=\"SITE?d=6638\">Test di matematica</a></td>";
Regex rx = new Regex(@"<a.*?>(.*?)</a>");
MatchCollection matches = rx.Matches(myString);
if (matches.Count > 0)
{
    Match match = matches[0]; // only one match in this case
    GroupCollection groupCollection = match.Groups;
    Console.WriteLine( groupCollection[1].ToString());
}

演示

http://ideone.com/nFY6aw

【讨论】:

    猜你喜欢
    相关资源
    最近更新 更多
    热门标签