2016-07-19 28 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(); 
} 
相關問題