正则表达式访问字符串中的元素

时间:2018-06-04 14:09:29

标签: c# arrays regex

我有以下正则表达式代码:

@"(N[0-9][EHPULMAVRYGBWK123670]{4}[N]{1}PF[0]{1}[0-9]{1})";

正则表达式中的[EHPULMAVRYGBWK123670]是指特定的按钮类型或颜色。

总共有四个按钮,它们在零件编号中的顺序表示它们在产品中的顺序(从左上角到右上角)。

例如,如果部件号包含:

RGBY - 红色(左上),绿色(右上),蓝色(左下),黄色(右下)

GBYR - 绿色(左上),蓝色(右上),黄色(左下),红色(右下)

按钮后,总是有字母N和PF编号。

我想要做的是提取颜色的4个字母组合。正则表达式中的{4}是捕获这些字母的内容。然后我需要根据字母的顺序做出决定。

我将如何做到这一点?

1 个答案:

答案 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