如何删除两个单词之间的字符串

时间:2013-12-09 05:15:37

标签: c# javascript html regex

我正在使用以下代码行下载网页

WebRequest request = WebRequest.Create(strURL);
WebResponse response = request.GetResponse();
Stream data = response.GetResponseStream();

string html = String.Empty;
using (StreamReader sr = new StreamReader(data))
{
  html = sr.ReadToEnd();
}

然后从这里我提取身体部位如下:

int nBodyStart = downloadString.IndexOf("<body");
int nBodyEnd = downloadString.LastIndexOf("</body>");
String strBody = downloadString.Substring(nBodyStart, (nBodyEnd - nBodyStart + 7));

现在我想删除身体部分附带的任何javascript,我该怎么做?

我的目标是获取网页的唯一内容。但由于每个页面可能有不同的方法,所以我试图删除任何js标签,然后使用以下RegEx删除任何HTML标签

Regex.Replace(strBody, @"<[^>]+>|&nbsp;", "").Trim();

但我不知道如何删除脚本标签之间的js,因为脚本可能是多行或单行。

提前致谢。

2 个答案:

答案 0 :(得分:1)

您可以使用HtmlAgilityPack

WebRequest request = WebRequest.Create(strURL);
WebResponse response = request.GetResponse();
Stream data = response.GetResponseStream();

string html = String.Empty;
using (StreamReader sr = new StreamReader(data))
{
  html = sr.ReadToEnd();
}

HtmlAgilityPack.HtmlDocument document = new HtmlAgilityPack.HtmlDocument();
document.LoadHtml(html);

// to remove all tags 
var result = document.DocumentNode.InnerText;

// to remove script tags inside body 
document.DocumentNode.SelectSingleNode("//body").Descendants()
                .Where(n => n.Name == "script")
                .ToList()
                .ForEach(n => n.Remove());

答案 1 :(得分:1)

要匹配脚本标记(包括对的内部),请使用以下命令:

<script[^>]*>(.*?)</script>

要匹配所有HTML标记(但不匹配对内部),您可以使用:

</?[a-z][a-z0-9]*[^<>]*>


我刚刚意识到你也可能也想删除样式标签:

<style[^>]*>(.*?)</style>


这里有完整的正则表达式字符串:

<script[^>]*>(.*?)</script>|<style[^>]*>(.*?)</style>|</?[a-z][a-z0-9]*[^<>]*>|<[^>]+>|&nbsp;