Bal*_*a R 34
input = Regex.Replace(input, "[^0-9]+", string.Empty);
Run Code Online (Sandbox Code Playgroud)
有四种不同的方法可以做到(很可能更多,但我选择了这些).
#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)