从任何“ a-zA-Z”字符后的字符串中删除任何内容

时间:2019-04-04 08:26:25

标签: c# string

我有这种类型的string

"10a10", "10b5641", "5a1121", "438z2a5f"

,我需要删除字符串中 FIRST a-zA-Z字符之后的所有内容(符号本身也应删除)。有什么解决方案?

我期望的结果示例:

"10a10"    returns "10" 
"10b5641"  returns "10" 
"5a1121"   returns "5" 
"438z2a5f" returns "438"

5 个答案:

答案 0 :(得分:4)

您可以将Regular ExpressionsRegex一起使用,例如:

string str = "10a10";
str = Regex.Replace(str, @"[a-zA-Z].*", "");
Console.WriteLine(str);

将输出:

10

基本上,它将以a-zA-Z开头的所有内容和之后的所有内容(.*匹配零个或无限次匹配的任何字符),并将其从字符串中删除。

答案 1 :(得分:1)

您可以按以下方式使用Linq进行操作。

var result = new string(strInput.TakeWhile(x => !char.IsLetter(x)).ToArray());

答案 2 :(得分:1)

一种易于理解的方法是使用String.IndexOfAny方法查找第一个a-zA-Z字符的索引,然后使用String.Substring方法相应地剪切字符串。

为此,您将创建一个包含所有a-zA-Z字符的数组,并将其用作String.IndexOfAny的参数。之后,将0和String.IndexOfAny的结果用作String.Substring的参数。

我很确定有更多优雅的方法可以做到这一点,但这对我来说似乎是最基本的方法,因此值得一提。

答案 3 :(得分:0)

Linq 中的任何一个:

var result = string.Concat(strInput
  .TakeWhile(c => !((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z')));

正则表达式

using System.Text.RegularExpressions;

...

var result = Regex.Match(strInput, "^[^A-Za-z]*").Value;

在两种情况下,从strInput开始都采用字符,直到出现a..zA-Z

演示:

  string[] tests = new[] {
    "10a10", "10b5641", "5a1121", "438z2a5f"
  };

  string demo = string.Join(Environment.NewLine, tests
    .Select(test => $"{test,-10} returns \"{Regex.Match(test, "^[^A-Za-z]*").Value}\""));

  Console.Write(demo);

结果:

10a10      returns "10"
10b5641    returns "10"
5a1121     returns "5"
438z2a5f   returns "438"

答案 4 :(得分:0)

   var sList = new List<string> { "10a10", "10b5641", "5a1121", "438z2a5f" };
            foreach (string s in sList.ToArray())
            {
                string number = new string(s.TakeWhile(c => !Char.IsLetter(c)).ToArray());
                Console.WriteLine(number);
            }