我有一个字符串,其第一部分是字符串,最后一个是数字,如下所示:
ahde7394
所以我想获得的是:
ahde
7394
我曾想过先提取字符串,然后从字符的最后一个位置获取数字,直到字符串结束,所以我认为使用索引器可以某种方式完成:
var stringQuery = NameComp.Select((str,index) => new {myStr=str, position=index})
.Where(c => !Char.IsDigit(c.myStr)).Select((ch,pos) => new { newStr=ch, pos=pos} );
然后我可以做:
1)获取字符串:stringQuery.newStr
2)获取数字:stringQuery.Skip(stringQuery.pos).Select(d => d);
但是它没有用,在获取stringQuery之后我无法访问它的项目,因为它是一个匿名类型....
有什么想法吗?
使用LINQ的解决方案,猜测str =“ahde7394”:
string letters = new string(str.TakeWhile(c => Char.IsLetter(c)).ToArray());
和数字:
string number = new string(str.Skip(letters.Length).TakeWhile(c => Char.IsDigit(c)).ToArray());
或者更好地猜测最后一部分是一个数字:
string number = str.Substring(name.Length);
答案 0 :(得分:4)
我同意dtb,LINQ可能不是正确的解决方案。
正则表达式是另一种选择,假设你的字符串可以比你提供的更加可变。
var str = "ahde7394";
var regex = Regex.Match(str, @"([a-zA-Z]+)(\d+)");
var letters = regex.Groups[1].Value; // ahde
var numbers = regex.Groups[2].Value; // 7394
答案 1 :(得分:1)
LINQ可能不是最好的解决方案。看看String.IndexOfAny Method:
char[] digits = new[] { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9' };
string input = "ahde7394";
int index = input.IndexOfAny(digits);
string head = input.Substring(0, index); // "ahde"
string tail = input.Substring(index); // "7394"
答案 2 :(得分:1)
您可以使用String.IndexOf
和String.Substring
之类的;
string s = "ahde7394";
int index = 0;
foreach (var i in s)
{
if(Char.IsDigit(i))
{
index = s.IndexOf(i);
break;
}
}
Console.WriteLine(s.Substring(0, index));
Console.WriteLine(s.Substring(index));
输出将是;
ahde
7394
这里有 DEMO
。