如何使用C#在<form> </form>之间提取数据

时间:2011-03-23 15:11:24

标签: c# regex forms tags

我试图通过正则表达式实现这一目标,但似乎根本没有工作。 我用PHP,Javascript尝试了相同的正则表达式模式,它就像一个魅力。我不知道为什么它不能用C#。

这是我的代码示例:

        Regex mysReg = new Regex(@"<form[^>]*action=""do\.php""[^>]*>(.*)<\/form>", RegexOptions.IgnoreCase | RegexOptions.Multiline);

        MatchCollection form = mysReg.Matches(html);

如果我删除了部分<\/form>,则正则表达式可以正常工作,但它不会获得括号内的内容。

现在有些人会告诉我使用“HtmlAgilityPack”。我试图使用它,但是,由于我还不熟悉C#,我发现很难使用它,因为它没有附带文档。

那么有什么方法可以解决这个问题吗?

3 个答案:

答案 0 :(得分:3)

您的(.*)与换行符不匹配。 ([\S\s]*?)可以使用,或者您可以使用RegexOptions.SingleLine打开换行符匹配。

但是,正如其他人所指出的那样,您应该使用HTML Agility Pack而不是trying to use regex to parse HTML

答案 1 :(得分:2)

使用HTML Agility Pack来解析文档而不是注册。你可能觉得不舒服,但这是要走的路。

下载附带示例 - 可以执行各种操作的项目,因此您可以阅读代码以了解它们是如何完成的。

然后,您将能够以XPath语法查询它,但它会公开类似XmlDocument的接口。

请参阅here,以了解使用RegEx解析HTML的充分理由。

答案 2 :(得分:1)

我在RegexBuddy玩这个并得到了 @"<form[^>]*action=""do\.php""[^>]*>([\s\S]*)<\/form>"使用我的(匆忙拼凑)样本数据。