拆分包含数字的字符串
本文关键字:字符串 数字 包含 拆分 | 更新日期: 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)");