2016-07-19 25 views
0

修剪字符串中具有字母前缀的所有字母表的最快方法是什么? 例如,输入sting“ABC12345”,我希望只有12345作为输出。 谢谢。c#如何修整字符串中的所有非数字字符

+0

可能的转贴...检查此链接:http://stackoverflow.com/questions/13773610/using-regex-split-to-remove-anything-non-numeric-and-splitting-on –

+0

尝试[正则表达式,就像这个SO帖子一样](http://stackoverflow.com/a/19715367/3407841) – leetibbett

回答

1

您可以使用Regular Expressions修剪字母前缀

var input = "ABC123"; 
var trimmed = Regex.Replace(input, @"^[A-Za-z]+", ""); 

// trimmed = "123" 

正则表达式(第二个参数)的替代方法的^[A-Za-z]+完成大部分工作的,它定义了什么您想要使用以下规则进行替换:

^字符确保只匹配e在串
[A-Za-z]开始xists将匹配任何大写或小写字母
+指大写或小写的字母将连续尽可能

由于这是Replace方法相匹配的次数,然后第三个参数用空字符串替换任何匹配。

0

你将不得不正规表达。看来你只是在寻找数字而不是字母。

样品:

string result = 
    System.Text.RegularExpressions.Regex.Replace("Your input string", @"\D+", string.Empty); 
+1

这将删除所有非数字字符。不只是这些在输入字符串的开头。 – MarcinJuraszek

+0

string result = System.Text.RegularExpressions.Regex.Replace(“Your input string”,@“^ \ D +”,string.Empty); 只需将@“\ D +”更改为@“^ \ D +”即可。 – AHBagheri

2

其他的答案似乎是回答什么是最慢的方式..所以,如果你真的需要以最快的方式,那么你可以找到的第一个数字的指数,并获得子:

string input = "ABC12345"; 
int i = 0; 
while (input[i] < '0' || input[i] > '9') i++; 
string output = input.Substring(i); 

最短方式获得的价值可能会是VB Val方法:

double value = Microsoft.VisualBasic.Conversion.Val("ABC12345"); // 12345.0 
+0

这更快。但! 'char.IsNumber()' – moarboilerplate

+0

@moarboilerplate'char.IsNumber()'提供的附加功能会比较慢,因为它有一些额外的unicode检查http://referencesource.microsoft.com/ #mscorlib程序/系统/ char.cs,33394fddc2eca22a – Slai

5

请使用 “char.IsDigit”,试试这个:

static void Main(string[] args) 
{ 
    var input = "ABC12345"; 
    var numeric = new String(input.Where(char.IsDigit).ToArray()); 
    Console.Read(); 
} 
相关问题