如何获取整数并删除C#中的所有字符串

ghi*_*hie 14 c# string integer

如何删除字符串并仅获取整数?

我有一个字符串(01 - ABCDEFG)

我只需要获得(01)

Bal*_*a R 34

input = Regex.Replace(input, "[^0-9]+", string.Empty);
Run Code Online (Sandbox Code Playgroud)


Jen*_*und 9

有四种不同的方法可以做到(很可能更多,但我选择了这些).

#1:来自Bala R的正则表达式

string output = Regex.Replace(input, "[^0-9]+", string.Empty);
Run Code Online (Sandbox Code Playgroud)

#2:来自Donut的regex和agent-j

string output = Regex.Match(input, @"\d+").Value;
Run Code Online (Sandbox Code Playgroud)

#3:Linq

string output = new string(input.ToCharArray().Where(c => char.IsDigit(c)).ToArray());
Run Code Online (Sandbox Code Playgroud)

#4:子串,为此工作,破折号必须在数字和文本之间的字符串中.

string output = input.Substring(0, input.IndexOf("-")).Replace(" ", "");
Run Code Online (Sandbox Code Playgroud)

有了这些输入:

string input1 = "01 - ABCDEFG";
string input2 = "01 - ABCDEFG123";
Run Code Online (Sandbox Code Playgroud)

对于1和2,结果将是:

output1 = "01";
output2 = "01123";
Run Code Online (Sandbox Code Playgroud)

对于3和4,结果将是:

output1 = "01";
output2 = "01";
Run Code Online (Sandbox Code Playgroud)

如果预期结果是获取字符串中的所有数字,请使用#1或#2,但如果预期结果仅是获取破折号之前的数字,请使用#3或#4.

字符串短,#1和#2的速度大致相同,#3和#4同样如此,但如果有很多次迭代或字符串长4倍或更多#2比#1快#4比#3快.

注意:如果括号中包含括号,则必须修改#4,但这不会使速度慢得多:

string output = input.Substring(0, input.IndexOf("-")).Replace(" ", "").Replace("(", "");
Run Code Online (Sandbox Code Playgroud)