C# 在任何“a-zA-Z”字符之后从字符串中删除任何内容
我有以下类型的字符串: 我需要删除字符串中第一个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
"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);
}