如果长度发生变化,从字符串中获取某些值的最简单方法是什么?

时间:2014-04-25 18:59:09

标签: c# .net regex

我有代码返回有关用户代理的信息。我想找到说MSIE 10.0的部分,如果是,则将Internet Explorer 10.0写入日志文件。没有正则表达式,有没有办法做到这一点?如果有必要,我会使用它们,我也不知道这个字符串是否总是相同的长度,所以我不认为子字符串是一致的。

  

浏览器:Mozilla / 5.0(兼容; MSIE 10.0; Windows NT 6.1;   三叉戟/ 6.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR   3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E)

这是返回字符串的代码:

var js = driver as IJavaScriptExecutor;
const string script = "return navigator.userAgent"; // get the user agent
if (js != null)
{
    var userAgent = (string) js.ExecuteScript(script);
    Logger.Log(Loglevel.Debug, "Brower: {0}", userAgent);
}

4 个答案:

答案 0 :(得分:3)

您可以简单地调用Contains来检查指定的字符串是否包含另一个字符串:

if (userAgent.Contains("MSIE 10.0")){
    ...
}

答案 1 :(得分:2)

您可以尝试在用户代理字符串上使用string.Contains()调用。

bool contains = userAgent.Contains("MSIE 10.0");
if(contains)
{
  //whatever
}

简单,没有正则表达式。我在一些不同的项目中使用它,工作正常。但如果您要查找的字符串发生变化,请注意误报。

答案 2 :(得分:2)

if(userAgent.Contains("MSIE 10.0"))
      File.AppendAllText("Logfilepath","InternetExplorer 10.0");

答案 3 :(得分:2)

System.String提供Contains方法,如果您搜索的特定字符串存在于调用Contains的字符串中,则该方法将返回true。

如果您想避免在日志语句中对浏览器版本进行硬编码,您仍然可以使用SubstringIndexOf来获取值...以下代码将记录:& #34;浏览器:Internet Explorer 10.0",假设userAgent的值为

" Mozilla / 5.0(兼容; MSIE 10.0; Windows NT 6.1; Trident / 6.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E)"

        if (userAgent.Contains("MSIE"))
        {
            int index = userAgent.IndexOf("MSIE") + 5; // + length of("MSIE ")
            int length = userAgent.IndexOf(';', index) - index;
            Logger.Log(Loglevel.Debug, "Browser: Internet Explorer {0}",
                userAgent.Substring(index, length)); 
        }    

第一个IndexOf将在" MSIE"之后检索userAgent的索引超过空格。第二个IndexOf使用该索引作为查找下一个分号的起点;这两个指数差异的长度。此时,Substring调用将返回userAgent字符串中与MSIE关联的版本号。