我正在编写一个通用的冒烟测试,我需要在每个页面标题中提取版本号,以便可以将其与结果一起记录下来,但是,由于某种原因,我的Regex会提取字符串的整个开头(包括它应该在之后开始的模式。
string title = "Random text RECOGNITIONPATTERN 9.0 (ENVIRONMENT)" ;
string searchstr= ".*RECOGNITIONPATTERN (.*) ";
Regex reg = new Regex(searchstr, RegexOptions.IgnoreCase);
string result = reg.Match(title).Groups[0].ToString();
我期望结果等于“ 9.0”,但是,我实际上得到的是“随机文本识别模式9.0”
任何想法
答案 0 :(得分:2)
由于默认情况下在“匹配”中,Groups[0]
包含整个输入字符串。改用Groups[1]
,或者更好的方法是,为您的捕获组命名:
string title = "Random text RECOGNITIONPATTERN 9.0 (ENVIRONMENT)" ;
string searchstr= "RECOGNITIONPATTERN (?<v>[0-9.]+)";
Regex reg = new Regex(searchstr, RegexOptions.IgnoreCase);
string result = reg.Match(title).Groups["v"].ToString();
您也不需要在模式开始时使用.*
,并且我建议您比.*
更准确地定义要捕获的字符->您想要的版本号,请考虑[0-9.]+
,它是“ 0-9或。中的一个或多个”。甚至可以考虑使用\d+[.]\d+