正则表达式匹配失败:无法从公式字符串提取目标AB开头标识符
问题分析与解决方案
问题根源
- 正则使用了
^和$锚点,要求匹配整个字符串,但目标子串嵌套在IIF(...)内部,无法触发匹配。 [CC|DD|EE]+写法错误:方括号[]是字符集,会将|视为普通字符,且+允许重复匹配(如CCCC),但你需要的是CC/DD/EE三选一的固定前缀,应改用圆括号分组(CC|DD|EE)。- 同理,
[F|G]错误,需改为(F|G),否则会匹配F、|、G中的任意单个字符。
修正后的正则与代码
调整后的正则表达式:
@"AB(CC|DD|EE)(F|G)\d{3}(HI|IC|HC)Z[A-Z0-9]{4}"
(\d等价于[0-9],写法更简洁)
完整代码示例:
var varFormula = "IIF(ABCCF012HIZ3000=0,0,ABCCF012HCZ3000/ABCCF012HIZ3000)"; MatchCollection matches = Regex.Matches(varFormula, @"AB(CC|DD|EE)(F|G)\d{3}(HI|IC|HC)Z[A-Z0-9]{4}", RegexOptions.IgnoreCase); // 遍历输出所有匹配项 foreach (Match match in matches) { Console.WriteLine(match.Value); }
执行结果
ABCCF012HIZ3000 ABCCF012HCZ3000 ABCCF012HIZ3000
如果需要去重,可将结果存入HashSet<string>:
var uniqueMatches = new HashSet<string>(); foreach (Match match in matches) { uniqueMatches.Add(match.Value); } foreach (var item in uniqueMatches) { Console.WriteLine(item); }
去重后输出:
ABCCF012HIZ3000 ABCCF012HCZ3000
内容的提问来源于stack exchange,提问作者jen
相关产品推荐
相关产品推荐

