拆分包含数字的字符串

时间:2014-03-27 12:01:13

标签: c#

我有一个字符串,

"abc kskd 8.900 prew"

需要Split此字符串,以便我得到"abc kskd""8.900 prew"

的结果

如何使用C#实现此目的?

5 个答案:

答案 0 :(得分:3)

使用LINQ获取第一位数的索引,然后使用Substring

var input = "abc kskd 8.900 prew";
var index = input.Select( (x,idx) => new {x, idx})
           .Where(c => char.IsDigit(c.x))
           .Select(c => c.idx)
           .First();

var part1 = input.Substring(0, index);
var part2 = input.Substring(index);

答案 1 :(得分:2)

如果你不需要做一些复杂的事情,那就应该这样做:

var data = "abc kskd 8.900 prew";
var digits = "0123456789".ToCharArray();

var idx = data.IndexOfAny(digits);

if (idx != -1)
{
  var firstPart = data.Substring(0, idx - 1);
  var secondPart = data.Substring(idx);
}

IndexOfAny实际上非常快。

这也可以修改为将字符串分成更多部分(使用startIndex参数),但你没有要求。

答案 2 :(得分:0)

直截了当地使用正则表达式:

var str = "abc kskd 8.900 prew";
var result = Regex.Split(str, @"\W(\d.*)").Where(x => x!="").ToArray();

答案 3 :(得分:0)

试试这个,

public string[] SplitText(string text)
{
var startIndex = 0;
while (startIndex < text.Length)
{
    var index = text.IndexOfAny("0123456789".ToCharArray(), startIndex);
    if (index < 0)
    {
        break;
    }

    var spaceIndex = text.LastIndexOf(' ', startIndex, index - startIndex);
    if (spaceIndex != 0)
    {
        return new String[] { text.Substring(0, spaceIndex), text.Substring(spaceIndex + 1) };
    }

    startIndex = index;
}

return new String[] {text};
}

答案 4 :(得分:0)

类似于@Dominic Kexel提供的内容,但仅限于您不想使用linq。

string[] result = Regex.Split("abc kskd 8.900 prew", @"\w*(?=\d+\.\d)");