c#正则表达式示例

时间:2014-04-05 21:57:58

标签: c# regex

以下是正确输入字符串的示例:

1,

2,A,B

3,A,B,C

4,A,B,C,B

依旧......

第一个数字表示字符串后面跟着多少个字母,其余字母可以是任何顺序的a,b或c。

是否可以使用正则表达式使用Regex.Match正确匹配并捕获第一个数字和每个字母(并排除逗号)?

2 个答案:

答案 0 :(得分:1)

您不需要使用正则表达式来执行此操作,只需使用LINQ。

string[] split = string.Split('.');
string number = split.First();
string[] letters = split.Skip(1).ToArray();

答案 1 :(得分:0)

您可以使用SplitLINQ方法。首先,您需要验证输入字符串:

var parts = input.Split(',');
bool isMatch = parts.Skip(1)
                    .Count(x => x.Length == 1 &&
                                char.IsDigit(x[0])) == int.Parse(parts[0]);

if(isMatch) 
    var digits = parts.Select(int.Parse);

更一般地说,您可以为此编写扩展方法:

public static bool IsMatch(this string source)
{
    if (source == null) throw new ArgumentNullException("source");

    var parts = source.Split(',');

    if (parts.Any())
    {
        return parts.All(x => x.Length > 0 &&  x.All(char.IsDigit)) && parts.Skip(1).Count() == int.Parse(parts[0]);
    }

    return false;
}

此方法将匹配以下字符串:

1,4
3,456,123,789
5,12,34,11,78,65

并且不会匹配以下字符串:

1,2,3
4,2,1
2,1
1,a
2,1,b