拆分包含数字的字符串

本文关键字:字符串 数字 包含 拆分 | 更新日期: 2023-09-27 17:54:12

我有一个字符串,比如

"abc kskd 8.900 prew"

需要Split这个字符串,以便我得到"abc kskd""8.900 prew"的结果

我如何才能实现这与C# ?

拆分包含数字的字符串

使用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);

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

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参数),但您没有要求这样做。

直接使用正则表达式:

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

试试这个,

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};
}

类似于@Dominic keexel提供的东西,但只有当你不想使用linq时。

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