简单的正则表达式不起作用

时间:2014-02-07 14:11:44

标签: c# regex

我想将字符串“F1”与“F12”匹配。我只需要这个号码。我没有接受训练 - 我的第一次尝试:

var r = new Regex(@"^(?:[F])[\d]{1,2}$");

匹配 - 但返回“F1” - 但我希望得到“1”?

我做错了什么?

2 个答案:

答案 0 :(得分:2)

也许你想使用lookbehind:

var r = new Regex(@"^(?<=F)\d\d?$");

答案 1 :(得分:1)

即使您使用非捕获组作为“F”,Regex的整体匹配也将返回匹配的整个字符串。组用于概述正则表达式中您希望能够提取其值的子表达式。如果要指定子表达式而不将其存储在组中,则使用非捕获组。它们允许您将量词应用于子表达式,但不允许您在对字符串运行正则表达式后提取其结果值。它们通常用于提高性能,因为捕获组会增加额外的开销。

如果您只想获得数字,则需要将数字部分放在捕获组中并查看生成的GroupsMatch属性(假设您正在调用{{1}功能)。

更新的r.Match将是:

Regex

由于我们的数字位于与捕获组关联的第一组括号内,因此它将是第1组。您还可以命名您的组,以避免在以后更新正则表达式时出现混淆或可能的错误。

或者,你可以像M42建议的那样使用look-behind。