2016-05-13 112 views
0

我有下面的代码调用网站并从页面中提取标题。工作正常,但它也提取新的行字符或选项卡。所以有时候串看起来像从网页中提取标题的正则表达式

\r\n\tSome WebSite | Official Company Website\r\n

public string GetPageTitle(string url) 
    { 
     string regex = @"(?<=<title.*>)([\s\S]*)(?=</title>)"; 
     string source = this._client.DownloadString(url); 
     return Regex.Match(source, regex, RegexOptions.IgnoreCase).Value;   
    } 

应该是什么正则表达式忽略\r\n\t

+1

使用'String.Trim()'从你的字符串,其中包括标签和新的生产线的空白。将'.Trim();'添加到'.Value'。 –

+0

可以尝试类减法https://msdn.microsoft.com/en-us/library/ms994330.aspx像'[\ S \ s - [\ r \ n \ t]]' – sln

+0

如果您想将它集成到你的正则表达式可以试试这个'@“(?<=)\ s *([\ S \ s - [\ r \ n \ t]] *)\ s *(?=)”'但这会限制捕获只有非线性,连续的文字。所以你可能会错过一些内部休息。另一种选择是修剪正则表达式'\ s *([\ S \ s] *?)\ s *' – sln

回答

1

考虑非正则表达式选项

如果你不明确地设置正则表达式,值得注意的是Trim()方法将删除任何前导和尾随

return Regex.Match(source, regex, RegexOptions.IgnoreCase).Value.Trim(); 

同样明确的更换将工作以及:

return Regex.Match(source, regex, RegexOptions.IgnoreCase).Value 
                  .Replace("\t","") 
                  .Replace(Environment.NewLine,"");