我在使用RestSharp,获取到指定网页的html文本,但该文本的格式都是转义过的,如下:
\r\n\r\n\r\n<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\r\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\r\n\t<head>\r\n\t\t<title>
.........
.........
我想要得到转义后的正常html代码,就是在console.WriteLine()中输出后的那种:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>
...........
...........
并将其存入string变量中,请问如何操作?
如果没有\r\n\t你保存在string里的东西就是一坨。
我就是要一坨,我又不是要看,要转义干嘛,我要直接用代码处理dom,转义字符会影响操作,谁还不知道转义字符作用
@chutianshu_1981: 你要人肉解析html?当我没说(逃。
@长蘑菇星人:
我要在winform应用中,用代码获取html里的特定模块。
用第三方库“HtmlAgilityPack”可以很方便进行html解析,前提是没有转义字符影响,得要纯粹的html代码。
如果实在没有什么好办法,我就直接用正则表达式去匹配了。
@chutianshu_1981: 什么样的库解析不了\r\n\t,我觉得并不是库不行。再说C#正则异常强大,绝对比你人肉快。
Html.Raw(返货的字符串)
我还是需要html标签的
@chutianshu_1981: 那你就在获取到值的时候替换一下呀,把\r\n替换成<br />,把\t替换成空格就好了呀
自己试了试,用的方法是:
1)先去掉/n/r/t之类的
string s = new string((from c in content.ToCharArray() where !char.IsControl(c) select c).ToArray());
2)使用string的replace方法把剩下的转义字符去掉。
关键是不太熟悉正则,不想再花时间查正则表达式,否则用正则也很不错
讲真正则一下就搞定了。。。
Regex.Replace(@"\t\r\n", @"\\t|\\r|\\n", m=> { switch(m.ToString()) { case @"\t": return "\t"; case @"\r": return "\r"; case @"\n": return "\n"; } return m.ToString(); }).