将字母数字混合的字符串拆分成包含字母和数字字符的数组。

6
我正在寻找一种将带字母数字的字符串分割的方法,例如:
"Foo123Bar"

翻译:将其放入一个数组中,如下所示
array[0] = "Foo"
array[1] = "123"
array[2] = "Bar"

我不确定实现这一点的最佳方法是什么,特别是因为我要比较的字符串没有特定的模式,无论哪个先出现,字母还是数字,或者它们各自出现的次数。例如,它可能看起来像下面任何一个:
"Foo123Bar"
"123Bar"
"Foobar123"
"Foo123Bar2"

我正在尝试找出除了逐个字符拆分字符串并检查其是否为数字之外的更有效的方法。

“Foobar123” 的结果应该是什么?是 Foobar123 还是 Foobar123 - Habib
"Foobar123"的结果应该是"Foobar""123" - Nvx
2个回答

17
string input = "Foo123Bar";
var array = Regex.Matches(input, @"\D+|\d+")
                 .Cast<Match>()
                 .Select(m => m.Value)
                 .ToArray();

0

我认为你无法避免检查字符串的每个字符。
你可以尝试像这样:

string[] SplitMyString(string s)
{
  if( s.Length == 0 )
    return new string[0];

  List<string> split = new List<string>(1);
  split.Add("");

  bool isNumeric = s[0] >= '0' && s[0] <= '9';
  foreach(char c in s)
  {
    bool AddString = false;
    if( c >= '0' && c <= '9' )
    {
      AddString = !isNumeric;
      isNumeric = true;
    }
    else
    {
      AddString = isNumeric;
      isNumeric = false;
    }
    if( AddString )
        split.Add(c.ToString());
    else
      split[split.Count-1] += c;
  }
  return split.ToArray();
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接