C# 如何分离字符串数组数据?

C# 如何分离字符串数组数据?,c#,arrays,string,C#,Arrays,String,我有一个字符串数组: 我需要像这样分开数字和单元格引用: String[] b = {"A1","B1","C1"}; String[] c = {"5"}; 使用linq非常简单,除了数字字符串识别。这是: static void Main(string[] args) { // Input: String[] values = { "A1", "B1", "C1", "5" }; // Results: String[] digits = (from

我有一个字符串数组:

我需要像这样分开数字和单元格引用:

String[] b = {"A1","B1","C1"}; 
String[] c = {"5"}; 

使用linq非常简单,除了数字字符串识别。这是:

static void Main(string[] args)
{

    // Input:
    String[] values = { "A1", "B1", "C1", "5" };

    // Results:
    String[] digits = (from x in values where StringContainsNumbersOnly(x) select x).ToArray();
    String[] cellRefs = (from x in values where !digits.Contains(x) select x).ToArray();

}

static bool StringContainsNumbersOnly(string inputString)
{
    return System.Text.RegularExpressions.Regex.IsMatch(inputString, @"^\d+$");
}

如果单元格引用的定义是以字母开头的字符串,则可以执行以下操作:

List<string> cellReferences = new List<string>();
List<string> digits = new List<string>();
String[] values  = {"A1","B1","C1","5"};

foreach(string val in values)
{
  if(Char.IsLetter(val[0]))
    cellReferences.Add(val);
  else
    digits.Add(val);
}

一个简单的linq就足够了

String[] values = { "A1", "B1", "C1", "5" };

var groups = values.ToLookup(s => s.All(char.IsDigit));

String[] b = groups[false].ToArray();
String[] c = groups[true].ToArray();
编辑

你的三州案件呢


那么这个varian呢:String[]value={A1,B1,C1,5,String};要分成三个数组吗


到目前为止你做了什么?提示:忽略数组部分。。。给定一个字符串,您将如何确定它是否是单元格引用?@ndn问题标记为C,所以不是。这个varian如何:string[]value={A1,B1,C1,5,string};要分成三个数组吗?我假定对于您的示例字符串,它表示没有数字的字符串。在本例中,创建一个新函数StringContainsNoNumbers,就像在StringContainsNumbersOnly中一样,但我在本例中返回Regex.IsMatchinputString,@^[a-zA-Z]+$;。然后在StringContainsNoNumbersx选择x.ToArray的值中使用String[]noNumbers=from x;正如您所看到的,整个要点在于选择x,其中x与所需的情况匹配。所以您可以只使用GoogleC字符串不包含数字或任何您想要的大小写,并将其插入select语句中。
String[] values = { "A1", "B1", "C1", "5" };

var groups = values.ToLookup(s => s.All(char.IsDigit));

String[] b = groups[false].ToArray();
String[] c = groups[true].ToArray();
String[] values = { "A1", "B1", "C1", "5", "string" };

var groups = values.ToLookup(s => s.All(char.IsDigit) ? 1 : s.All(char.IsLetter) ? -1 : 0);

String[] alldigit = groups[1].ToArray();
String[] allLetter= groups[-1].ToArray();
String[] mixed    = groups[0].ToArray();