字符串的前 N 个字符,直到它们不是数字
First N Characters of a String until they are not digits
我有一个很长的字符串,例如下面两个字符串:
- 93434234adfjasdf asdfjksdfkl afjasdlfjl asdfjsdlkfjasldf ksdafjlaskdfjasdf
- 123asdjfklasdfj asdf asdfjlkasd jasdlfkja sdfj klasdjfkl asdflk asdfj
我知道字符串每次都以数字开头,但我不知道字符串中有多少个字符是数字。当然,我可以做这样的事情:
string completeText = "93434234adfjasdf asdfjksdfkl afjasdlfjl asdfjsdlkfjasldf ksdafjlaskdfjasdf";
char[] charSequence = completeText.ToCharArray();
int counter = 0;
foreach (var charItem in charSequence)
{
if (Char.IsDigit(charItem))
{
counter++;
}
else
{
//Leave loop
break;
}
}
string myDigitsAtTheBeginningOfTheString = completeText.Substring(0, counter);
有没有更流畅的方法?
您可以使用 TakeWhile
:
Returns elements from a sequence as long as a specified condition is true, and then skips the remaining elements.
using System;
using System.Linq;
public static void Main()
{
var input = "93434234adfjasdf asdfjksdfkl afjasdlfjl asdfjsdlkfjasldf ksdafjlaskdfjasdf";
Console.WriteLine(string.Concat(input.TakeWhile(char.IsDigit)));
}
如果您想避免使用 Linq(但 TakeWhile 很不错),您可以重写代码以使用简单的 for
循环和 StringBuilder
:
using System;
using System.Text;
public static void Main()
{
var input = "93434234adfjasdf asdfjksdfkl afjasdlfjl asdfjsdlkfjasldf ksdafjlaskdfjasdf";
var sb = new StringBuilder();
for (var counter = 0; char.IsDigit(input[counter]) && counter < input.Length; counter++) {
sb.Append(input[counter]);
}
Console.WriteLine(sb.ToString());
}
(?<numbers>^[0-9]*)
将匹配从字符串开头开始的所有从 0-9 的数字,并将它们放在 <numbers>
组中。
我有一个很长的字符串,例如下面两个字符串:
- 93434234adfjasdf asdfjksdfkl afjasdlfjl asdfjsdlkfjasldf ksdafjlaskdfjasdf
- 123asdjfklasdfj asdf asdfjlkasd jasdlfkja sdfj klasdjfkl asdflk asdfj
我知道字符串每次都以数字开头,但我不知道字符串中有多少个字符是数字。当然,我可以做这样的事情:
string completeText = "93434234adfjasdf asdfjksdfkl afjasdlfjl asdfjsdlkfjasldf ksdafjlaskdfjasdf";
char[] charSequence = completeText.ToCharArray();
int counter = 0;
foreach (var charItem in charSequence)
{
if (Char.IsDigit(charItem))
{
counter++;
}
else
{
//Leave loop
break;
}
}
string myDigitsAtTheBeginningOfTheString = completeText.Substring(0, counter);
有没有更流畅的方法?
您可以使用 TakeWhile
:
Returns elements from a sequence as long as a specified condition is true, and then skips the remaining elements.
using System;
using System.Linq;
public static void Main()
{
var input = "93434234adfjasdf asdfjksdfkl afjasdlfjl asdfjsdlkfjasldf ksdafjlaskdfjasdf";
Console.WriteLine(string.Concat(input.TakeWhile(char.IsDigit)));
}
如果您想避免使用 Linq(但 TakeWhile 很不错),您可以重写代码以使用简单的 for
循环和 StringBuilder
:
using System;
using System.Text;
public static void Main()
{
var input = "93434234adfjasdf asdfjksdfkl afjasdlfjl asdfjsdlkfjasldf ksdafjlaskdfjasdf";
var sb = new StringBuilder();
for (var counter = 0; char.IsDigit(input[counter]) && counter < input.Length; counter++) {
sb.Append(input[counter]);
}
Console.WriteLine(sb.ToString());
}
(?<numbers>^[0-9]*)
将匹配从字符串开头开始的所有从 0-9 的数字,并将它们放在 <numbers>
组中。