【发布时间】:2019-09-05 13:40:33
【问题描述】:
我正在编写一个通用的冒烟测试我需要在每个页面标题中提取版本号,以便我可以将它与结果一起记录,但是,由于某种原因,我的正则表达式带出了整个字符串的开头(包括它应该在之后开始的模式。
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”
任何想法
【问题讨论】:
-
Groups[0]返回整个匹配项。为您的实际捕获组尝试Groups[1] -
谢谢你的作品。但是为什么当语言的其余部分从零开始时有一个不是:|
-
这并不是说“它不是基于 0”,因为有一个 Groups[0] 所以 c# 仍然是基于 0 的,这只是“索引 0 包含整个输入字符串”的实现规则。大多数正则表达式引擎都具有此功能。请参阅我的答案,并使用命名的捕获组。旁注,在用于编写 excel 文件的 EPPlus 库中,索引从 1 开始,因为这是 excel 表的开始。作者做了一个实现决定,“1 应该指第一行”,但他的选择并不意味着 c# 不再是从 0 开始的,他只是选择它,因为 Excel 将第一行编号为 1