C# 在任何“a-zA-Z”字符之后从字符串中删除任何内容

C# 在任何“a-zA-Z”字符之后从字符串中删除任何内容,c#,string,C#,String,我有以下类型的字符串: 我需要删除字符串中第一个a-zA-Z字符之后的任何内容,符号本身也应该删除。解决办法是什么 我期望的结果示例: "10a10" returns "10" "10b5641" returns "10" "5a1121" returns "5" "438z2a5f" returns "438" 您可以使用,例如: string str = "10a10"; str = Regex.Replace(str, @"[a-zA-Z].*", ""); Conso

我有以下类型的字符串:

我需要删除字符串中第一个a-zA-Z字符之后的任何内容,符号本身也应该删除。解决办法是什么

我期望的结果示例:

"10a10"    returns "10" 
"10b5641"  returns "10" 
"5a1121"   returns "5" 
"438z2a5f" returns "438"
您可以使用,例如:

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

10

基本上,它将接受以a-zA-Z开头的所有字符以及其后的所有字符。*匹配任何字符零次或无限次,并将其从字符串中删除。

您可以使用Linq执行此操作,如下所示

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

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

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

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

林克:

在这两种情况下,从strInput开始,直到出现a..z或a-z为止,都使用字符

演示:

结果:


你说的是之后,但意思是包括?还有,你试过什么?a你不需要这个。托卡瑞。b那。伊斯兰特将不仅仅停留在a-zA-Z,但我认为这种区别对OP来说并不重要
var result = new string(strInput.TakeWhile(x => !char.IsLetter(x)).ToArray());
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;
  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"
   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);
            }