【发布时间】:2012-06-13 13:09:53
【问题描述】:
所以,假设我正在解析以下 HTML 字符串:
<html>
<head>
RANDOM JAVASCRIPT AND CSS AHHHHHH!!!!!!!!
</head>
<body>
<table class="table">
<tr><a href="/subdir/members/Name">Name</a></tr>
<tr><a href="/subdir/members/Name">Name</a></tr>
<tr><a href="/subdir/members/Name">Name</a></tr>
<tr><a href="/subdir/members/Name">Name</a></tr>
<tr><a href="/subdir/members/Name">Name</a></tr>
<tr><a href="/subdir/members/Name">Name</a></tr>
<tr><a href="/subdir/members/Name">Name</a></tr>
<tr><a href="/subdir/members/Name">Name</a></tr>
<tr><a href="/subdir/members/Name">Name</a></tr>
<tr><a href="/subdir/members/Name">Name</a></tr>
</table>
<body>
</html>
我想隔离 ** 的内容(表类中的所有内容)
现在,我使用正则表达式来完成此操作:
string pagesource = (method that extracts the html source and stores it into a string);
string[] splitSource = Regex.Split(pagesource, "<table class=/"member/">;
string memberList = Regex.Split(splitSource[1], "</table>");
//the list of table members will be in memberList[0];
//method to extract links from the table
ExtractLinks(memberList[0]);
我一直在寻找执行此提取的其他方法,并且在 C# 中遇到了 Match 对象。
我正在尝试做这样的事情:
Match match = Regex.Match(pageSource, "<table class=\"members\">(.|\n)*?</table>");
上述的目的是希望提取两个分隔符之间的匹配值,但是,当我尝试运行它时,匹配值是:
match.value = </table>
因此,我的问题是:有没有一种方法可以从我的字符串中提取数据,它比我使用正则表达式的方法更容易/更易读/更短?对于这个简单的例子,正则表达式很好,但对于更复杂的例子,我发现自己在我的屏幕上到处都是涂鸦。
我真的很想使用 match,因为它看起来是一个非常整洁的类,但我似乎无法让它满足我的需要。谁能帮我解决这个问题?
非常感谢!
【问题讨论】:
-
一个小提示:两个表格标签之间的正则表达式部分应为
(.|\n)*?。如果您不在.|\n周围加上括号,那么*?将仅适用于它之前的字符(在这种情况下为\n)。 -
你是不是错过了一些
<td>标签? -
是的,我输入了 html 并没有注意 =p.