我有以下正则表达式代码:
@"(N[0-9][EHPULMAVRYGBWK123670]{4}[N]{1}PF[0]{1}[0-9]{1})";
正则表达式中的[EHPULMAVRYGBWK123670]是指特定的按钮类型或颜色。
总共有四个按钮,它们在零件编号中的顺序表示它们在产品中的顺序(从左上角到右上角)。
例如,如果部件号包含:
RGBY - 红色(左上),绿色(右上),蓝色(左下),黄色(右下)
GBYR - 绿色(左上),蓝色(右上),黄色(左下),红色(右下)
按钮后,总是有字母N和PF编号。
我想要做的是提取颜色的4个字母组合。正则表达式中的{4}
是捕获这些字母的内容。然后我需要根据字母的顺序做出决定。
我将如何做到这一点?
答案 0 :(得分:3)
您需要稍微修改正则表达式,以便捕获相关的四个字母。然后,您可以决定如何处理它们:
var pattern = @"(N[0-9]([EHPULMAVRYGBWK123670]{4})[N]{1}PF[0]{1}[0-9]{1})";
var test = "NO4A6SRP11N2UBWYNPF05";
var regex = new Regex(pattern, RegexOptions.IgnoreCase);
var result = regex.Match(test);
if(result.Success)
{
var value = result.Groups[2].Value;
switch (value)
{
case "UBWY":
//Do something
break;
case "RBYG":
//Do something
break;
default:
break;
}
}
请注意与四个字母匹配的模式周围的括号。
有更优雅的方法来决定如何处理四字母代码。在这种情况下,我提供了一个简单的switch
语句用于说明目的。
或者,您可以检查逐个字母捕获的字符串:
//Character by character, in order
for (int i = 0; i < value.Length; i++)
{
char letter = value[i];
//Decide what to do here.
}
//Or check positions by index
if(value[0] == 'U')
{
//Decide what to do here.
}
根据可能的组合数量,您可能需要考虑使用state machine。