【问题标题】:Extract text from multiline HTML using Regex使用正则表达式从多行 HTML 中提取文本
【发布时间】:2017-10-31 01:54:43
【问题描述】:

我正在尝试从 HTML 文件中提取一些文本。

这是让我头疼的部分示例:

<TD>
      Adresa instalacije:
  </TD>
  <TD COLSPAN=2>

    <TABLE border=0 cellpadding=3 cellspacing="1" bgcolor="#AAAA77" width="100%">
      <TR bgcolor="#FFFFCC">
        <TD COLSPAN=2><B>SOME TEXT</B></TD>
      </TR>
      <TR bgcolor="#FFFFCC">
        <TD>ADM &#353;ifra: </TD>
        <TD><B>914122</B></TD>
      </TR>
    </TABLE>
  </TD>

我要提取的部分在

之间
 <TD COLSPAN=2><B> </B></TD>

这是我的正则表达式:

var regexAdresa = @"<TD>Adresa korisnika:</TD><TD COLSPAN=2>";
regexAdresa += @"<TABLE border=0 cellpadding=3 cellspacing=""1"" bgcolor=""#AAAA77"" width=""100%"">";
 regexAdresa += @"<TR bgcolor=""#FFFFCC"">";
 regexAdresa += @"<TD><B>(.*?)</B></TD>";
 regexAdresa += @"</TR></TABLE></TD>";

var r0 = new Regex(regexAdresa);
var rr0 = r0.Match(text);
var res0 = rr0.Groups[1].ToString();

我的结果总是 resurs 0。我做错了什么吗?

【问题讨论】:

  • 为什么要这样做?查找 HTML 解析器。
  • 你不能假装空白不存在。正则表达式匹配你告诉他们匹配的字符;他们不会说“哦,这看起来像 HTML,让我们看看,HTML 的解析规则是什么……”不过,一个合适的 HTML 解析器会很乐意为您忽略空格。
  • 惊讶的this还没有关联。
  • @Josef 不,这个很容易。十五分钟前我告诉过你答案。正则表达式的答案,我的意思是——除了“正确”的答案,即使用 HTML 解析器。
  • 正如其他人所提到的,您可以使用一些 HTML 解析器,如 HTMLAgilityPack 或其他东西。对于这个特定示例,您可能可以使用像 &lt;TD( COLSPAN=[1-9]+)?&gt;&lt;B&gt;[^&lt;&gt;]+&lt;\/B&gt;&lt;\/TD&gt; 这样的正则表达式,检查 here

标签: c# regex html-parsing


【解决方案1】:

我会使用 PhantomJS,它对用户是不可见的,它会解析整个 DOM,让您可以通过 Selenium 访问。访问&lt;TD COLSPAN=2&gt;&lt;B&gt; &lt;/B&gt;&lt;/TD&gt;.

var text = driver.findElement(By.CssSelector("td.colspan=2" b)).Text;

警告代码未经测试,仅作为示例给出。

有关在 Selenium 中使用 By 定位器的更多信息,请单击 here

【讨论】:

    【解决方案2】:

    感谢所有人,尤其是@Arghya C。

    我已经尝试了一些东西,现在这满足了我的需求。也许不是最好的解决方案,但它确实有效:

    var regexAdresa = @"<TD (COLSPAN=[1-9]+)?><B>[^<>]+<\/B><\/TD>";
    Regex g = new Regex(regexAdresa);
    Match m = g.Match(text);
    if (m.Success)
       {
           MessageBox.Show(m.ToString());
           MessageBox.Show(Regex.Replace(m.ToString(), "<.*?>", String.Empty));                
        }
    

    我得到了我想要的文本所在的行,并且在第二步中使用正则表达式删除了 HTML 标记。

    【讨论】:

      猜你喜欢
      • 2010-09-15
      • 2023-03-18
      • 2018-05-08
      • 1970-01-01
      • 2010-12-31
      • 2012-03-12
      • 2016-09-04
      • 2017-10-08
      相关资源
      最近更新 更多