[英]How do I extract a string of text that lies between *>…* using .NET C# regex or anything else?
[英]How to extract string between 2 markers using Regex in .NET?
我有网页的来源,我需要提取正文。 </head><body>
和</body></html>
。
我已经尝试了以下方法,但均未成功:
var match = Regex.Match(output, @"(?<=\</head\>\<body\>)(.*?)(?=\</body\>\</html\>)");
它会找到一个字符串,但会在</body></html>
之前将其切断。 我基于正则表达式的转义字符小抄 。
我想念什么?
我建议改用HtmlAgilityPack-用正则表达式解析HTML非常非常脆弱。
最新版本甚至支持Linq,因此您可以获取如下内容:
HtmlWeb web = new HtmlWeb();
HtmlDocument doc = web.Load("http://stackoverflow.com");
string html = doc.DocumentNode.Descendants("body").Single().InnerHtml;
正如这里许多人所说的,正则表达式不是用于这种html处理的。 没有您的示例网页/ html,我只能说尝试删除非贪婪的内容?
(.*?)
量词并尝试。 毕竟,一个html页面只有一个头和身体。
尽管正则表达式绝对不是执行此任务的最佳工具,但我还是要提出一些建议和要点:
我建议更像:
(?<=</head>\s*<body(\s[^>]*)?>)(.*?)(?=</body>\s*</html>)
在此页面的源代码上,这似乎对我有用!
正如其他人所说,处理此问题的正确方法是使用特定于HTML的工具。 我只想指出该备忘单的一些问题。
首先,关于尖括号是错误的:您不需要将其转义。 实际上,这是错误的两次:它还说\\<
和\\>
匹配单词边界,这对于.NET既不正确,又与转义尖括号的建议不兼容。
该备忘单只是正则表达式语法元素的随机集合; 它们中的大多数都可以在大多数口味下使用,但是无论发生什么情况,都可以保证许多产品都不能在您的特定口味下使用。 我建议您不要理会它,而应依赖于.NET特定的文档或Regular-Expressions.info 。 《 掌握正则表达式》和《 正则表达式食谱》这两本书也都很出色。
至于您的正则表达式,我不知道它如何表现出您所说的方式。 如果要失败,我希望它会完全失败。 您的HTML文档中是否包含CDATA部分或SGML注释,其中包含</body></html>
? 还是两个或多个HTML文档一起运行?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.