C# 使用C中的match在两个字符串分隔符之间提取字符串的内容#

C# 使用C中的match在两个字符串分隔符之间提取字符串的内容#,c#,regex,match,C#,Regex,Match,假设我正在解析以下HTML字符串: <html> <head> RANDOM JAVASCRIPT AND CSS AHHHHHH!!!!!!!! </head> <body> <table class="table"> <tr><a href="/subdir/members/Name">Name</a></tr&

假设我正在解析以下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>

随机JAVASCRIPT和CSS啊啊啊啊啊!!!!!!!!
我想隔离***的内容(table类中的所有内容)

现在,我使用正则表达式来实现这一点:

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]);
string pagesource=(提取html源代码并将其存储到字符串中的方法);
字符串[]splitSource=Regex.Split(pagesource,”;
字符串memberList=Regex.Split(splitSource[1],“”);
//表成员列表将位于memberList[0]中;
//方法从表中提取链接
提取链接(成员列表[0]);
我一直在寻找其他方法来进行提取,我在C#中遇到了匹配对象

我正在尝试这样做:

Match match = Regex.Match(pageSource, "<table class=\"members\">(.|\n)*?</table>");
Match Match=Regex.Match(pageSource,(.|\n)*?);
上面的目的是希望提取两个分隔符之间的匹配值,但是,当我尝试运行它时,匹配值是:

match.value = </table>
match.value=
因此,我的问题是:有没有一种从我的字符串中提取数据的方法比我使用正则表达式的方法更简单/可读性更强/更短?对于这个简单的例子,正则表达式很好,但对于更复杂的例子,我发现自己的编码相当于在屏幕上乱涂乱画

我真的很想使用match,因为它看起来是一门非常整洁的课程,但我似乎无法让它满足我的需要。有人能帮我吗

非常感谢!

使用HTML解析器,如

使用HTML解析器,如


您可以将XPath与HtmlAlityPack一起使用:

HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();
doc.LoadHtml(s);
var elements = doc.DocumentNode.SelectNodes("//table[@class='table']");

foreach (var ele in elements)
{
    MessageBox.Show(ele.OuterHtml);
}

您可以将XPath与HtmlAlityPack一起使用:

HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();
doc.LoadHtml(s);
var elements = doc.DocumentNode.SelectNodes("//table[@class='table']");

foreach (var ele in elements)
{
    MessageBox.Show(ele.OuterHtml);
}

为了捕获匹配项,您在正则表达式中添加了括号:

Match Match=Regex.Match(pageSource,(.|\n*?)”)


无论如何,似乎只有Chuck Norris能够正确解析带有正则表达式的HTML。

为了捕获匹配项,您在正则表达式中添加了括号:

Match Match=Regex.Match(pageSource,(.|\n*?)”)


无论如何,似乎只有Chuck Norris可以正确解析带有正则表达式的HTML。

一个小提示:两个表标记之间的正则表达式部分应该是
(.|\n)*?
。如果不在
|\n
周围加括号,那么
*?
将只应用于它前面的字符(\n在这种情况下)。可能的重复项您是否缺少一些
标记?是的,我键入了html,但没有注意=p。一个小提示:两个表标记之间的正则表达式部分应为
(.|\n)*?
。如果在
|\n
周围不加括号,则
*?
将仅应用于它前面的字符(\n在本例中)。可能的重复项您是否缺少一些
标记?是的,我键入了html,但没有注意=p。我实际上正在尝试html agility pack,但缺少文档是可怕的!而且新的可下载文件没有chm,因此,为了寻求帮助,我基本上是在查看可下载文件附带的清单…总而言之,这并不是一种友好的体验!@gfppaste,没有真正的文档需求,API非常简单,非常类似于Linq to XML。我通过使用Intellisense学会了使用它,它非常直观。我实际上在尝试HTML agility pack,但缺少文档非常可怕!新的可下载的没有chm,所以,为了寻求帮助,我基本上是在查看可下载的清单……总之,它不利于提供友好的体验!@gfppaste,没有真正的文档需求,API非常自我解释,非常类似于Linq to XML。我通过使用Intellisense学会了使用它,它非常直观激动人心的。