我想将字符串“F1”与“F12”匹配。我只需要这个号码。我没有接受训练 - 我的第一次尝试:
var r = new Regex(@"^(?:[F])[\d]{1,2}$");
匹配 - 但返回“F1” - 但我希望得到“1”?
我做错了什么?
答案 0 :(得分:2)
也许你想使用lookbehind:
var r = new Regex(@"^(?<=F)\d\d?$");
答案 1 :(得分:1)
即使您使用非捕获组作为“F”,Regex
的整体匹配也将返回匹配的整个字符串。组用于概述正则表达式中您希望能够提取其值的子表达式。如果要指定子表达式而不将其存储在组中,则使用非捕获组。它们允许您将量词应用于子表达式,但不允许您在对字符串运行正则表达式后提取其结果值。它们通常用于提高性能,因为捕获组会增加额外的开销。
如果您只想获得数字,则需要将数字部分放在捕获组中并查看生成的Groups的Match属性(假设您正在调用{{1}功能)。
更新的r.Match
将是:
Regex
由于我们的数字位于与捕获组关联的第一组括号内,因此它将是第1组。您还可以命名您的组,以避免在以后更新正则表达式时出现混淆或可能的错误。
或者,你可以像M42建议的那样使用look-behind。