使用Regex从多行HTML中提取文本

时间:2017-05-30 14:18:17

标签: c# regex html-parsing

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

这是让我成为hedeache的部分样本:

<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();

我的结果总是恢复0.我做错了吗?

2 个答案:

答案 0 :(得分:2)

我使用PhantomJS,它对用户是不可见的,它会解析整个DOM,让您通过Selenium进行访问。访问<TD COLSPAN=2><B> </B></TD>.

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

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

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

答案 1 :(得分:0)

感谢所有人,尤其感谢@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标记。