C#正则表达式解析HTML [重复]
Posted
技术标签:
【中文标题】C#正则表达式解析HTML [重复]【英文标题】:C# Regex parsing HTML [duplicate] 【发布时间】:2011-01-23 06:55:24 【问题描述】:我的价值 1
我需要“我的价值 1”,请帮助我。 C#语言
【问题讨论】:
标签是否总是相同的格式(例如 3 层深,一个 tr、一个 td 和一个字体) 你用什么语言来解析这个? 【参考方案1】:试试:
/<tr>\s*<td>\s*<font.*?>(.*?)<\/font>\s*<\/td>\s*<\/tr>/i
在 php 中使用:
<?php
if(preg_match('/<tr>\s*<td>\s*<font.*?>(.*?)<\/font>\s*<\/td>\s*<\/tr>/i',
'<tr><TD><FONT size="2">My Value 1</FONT></TD></tr>',$matches))
echo $matches[1]; // prints My Value 1
?>
【讨论】:
@codaddict 我需要 c# 语言 :-)【参考方案2】:function stripTags(markup)
return markup.replace(/\s*<[^>]*?>\s*/gim,'');
假设您真正想要的只是上面“我的价值 1”表示的内部文本。
【讨论】:
【参考方案3】:您无法使用正则表达式正确解析 html,因为正则表达式无法处理 HTML 允许的嵌套。要正确地做到这一点。对于您显示的那一行,您可以使用正则表达式,但您不能指望该行保持相同,因此通常必须使用 SAX/DOM 来完成任务。
【讨论】:
但是您可以使用正则表达式解析恰好是 HTML 的固定字符串。虽然这样做有很多问题,但它们是 OP 可能没有的问题。 @Tom - 同意。但是,尽管 OP 今天没有它们,但他可能明天就不会想知道发生了什么,希望如此。【参考方案4】:由于 HTML 代码非常“不可预测”,我建议使用 HTML 解析工具包。您使用哪种编程语言?在 .NET 中,我使用 HTML Agility Pack 取得了巨大成功。在 Java 中,HTML Parser 可能很方便(尽管我还没有使用它)。
【讨论】:
【参考方案5】:如果您使用的是 PHP,请在 </FONT>
上拆分
$string='<tr><TD><FONT size="2">My Value 1</FONT></TD></tr>';
$s = explode('</FONT>',$string);
foreach ($s as $v)
if ( strpos($v,"<FONT") !==FALSE)
$t = explode(">",$v);
print end($t)."\n";
输出
$ php test.php
My Value 1
【讨论】:
【参考方案6】:在 perl 中我会使用
my $string='<tr><TD><FONT size="2">My Value 1</FONT></TD></tr>';
$string =~ m/(<.*?>)*([^<]*)(<.*?>)*/;
print $2;
得到想要的结果。最后一部分不是绝对必要的,
(<.*?>)*([^<]*)
也可以
【讨论】:
【参考方案7】:如果你想获取标签内的内容,我认为下面的正则表达式就足够了:
^<.*>([^<>]+)<.*>$
只有在标签之间确实有任何数据时才会起作用,否则它将给出不匹配。
【讨论】:
我只需要值“我的价值 1”【参考方案8】:我认为使用正则表达式解析 HTML 不是一个明智的想法,正如 spa 所强调的那样。 以前对类似问题的经典答案是RegEx match open tags except XHTML self-contained tags
【讨论】:
【参考方案9】:c#语言
string input = "<tr><TD><FONT size=\"2\">My Value 1</FONT></TD></tr>";
string pattern = @"<[^>]*?>";
string output = Regex.Replace(input, pattern, ""); //My Value 1
只是为了删除所有的html标签。
【讨论】:
以上是关于C#正则表达式解析HTML [重复]的主要内容,如果未能解决你的问题,请参考以下文章