以下是正确输入字符串的示例:
1,
2,A,B
3,A,B,C
4,A,B,C,B
依旧......
第一个数字表示字符串后面跟着多少个字母,其余字母可以是任何顺序的a,b或c。
是否可以使用正则表达式使用Regex.Match正确匹配并捕获第一个数字和每个字母(并排除逗号)?
答案 0 :(得分:1)
您不需要使用正则表达式来执行此操作,只需使用LINQ。
string[] split = string.Split('.');
string number = split.First();
string[] letters = split.Skip(1).ToArray();
答案 1 :(得分:0)
您可以使用Split
和LINQ
方法。首先,您需要验证输入字符串:
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