2013-07-02 30 views
-2

我有這樣一個值ab48/2012。如何從這個字符串中提取數字?我需要將48存儲在一個變量中,並將2012存儲在另一個變量中。如何從字符串中獲取數字並將其存儲在c中的變量中#

是否可以在不使用子字符串函數的情況下提取數字? 如果可能,請幫助我。

我已經試過這樣

string Value = "ab48/2012"; 
string[] array = value.Split('/'); 
int Value1 = Convert.ToInt32(array[0].Substring(2)); 
int Value2 = Convert.ToInt32(array[1].ToString()); 
+3

所有的字符串都是相同的格式嗎? – Dai

+0

當你嘗試時發生了什麼? – ChiefTwoPencils

+0

當你嘗試時發生了什麼? – V4Vendetta

回答

1
string[] parts = "abc48/2012".Split('/'); 
int value1 = Int32.Parse(new String(parts[0].Where(Char.IsDigit).ToArray())); 
int value2 = Int32.Parse(parts[1]); 

如果你發現自己使用這種代碼有很多,你可以如介紹一個實用的擴展方法

public static string GetIntegersOnly(this string str) 
{ 
    return new String(str.Where(Char.IsDigit).ToArray()); 
} 
... 
int value1 = Int32.Parse(parts[0].GetIntegersOnly()) 
+0

我喜歡與'.Anything'的文字。這是一個恥辱,很明顯,你缺乏選票,因爲你的答案缺乏正則表達式。 '++表決;' – ChiefTwoPencils

+1

@C。Lang是啊,我個人試圖在Regex之前儘可能使用框架,他們在最好的時候可能會變得複雜。哦,你會喜歡這個[答案](http://stackoverflow.com/questions/1741870/c-sharp-enumerable-range/1741956#1741956)然後! – James

+1

是的,與多樣性來聰明!愛這個答案! – ChiefTwoPencils

0

您可以使用正則表達式

var result = System.Text.RegularExpressions.Regex.Matches("abc48/2012", "[0-9]+", System.Text.RegularExpressions.RegexOptions.IgnoreCase); 
      foreach(var val in result){ 
       var temp_variable = val; 
      } 
+0

你爲什麼要放一個減號? –

+0

我最初因爲你的回答剛剛說'你可以使用正則表達式'而低估了。這不是一個答案。現在你已經用代碼和正則表達式更新了它,我已經刪除了downvote :) – keyboardP

+0

我明白了這個錯誤。 Thx :) –

0

也許:

string[] tokens = "ab48/2012".Split('/'); 
int num = int.Parse(new string(tokens.First().Where(Char.IsDigit).ToArray())); 
int year = int.Parse(tokens.Last()); 

Demo

但總的來說,我不明白你對保留其Substring是非常有效的。

+0

我假設OP不想使用'Substring',因爲如果不能保證數字不在一起,它會稍微複雜一點的代碼。 'ab4c35'。 – James

+0

@詹姆斯:OP只展示了一個示例,並沒有提及'Substring'的實際問題或限制。這就是爲什麼我提到在輸入格式嚴格時使用'Substring'或其他字符串函數沒什麼不好的原因。這是最有效和直接的方法,比使用生成不必要數組的「Split」更加高效。 –

0

你可以這樣做:

string value = "ab48/2012"; 
var charArray = value.ToCharArray(). 
      Reverse().TakeWhile(c=>char.IsDigit(c)).Reverse().ToArray(); 
var resultString = new string(charArray); 
  • 創建字符數組
  • 扭轉它
  • 得到所有字符,直到第一個不是數字
  • 轉回
  • 通到字符數組
  • 從該陣列創建一個新字符串
1
var input = "ab48/2012"; 
var regex = new Regex(@"^[^\d]*(?<a>\d*?)/(?<b>\d*)$"); 
var m = regex.Match(input); 
if(m.Success) 
{ 
    var a = m.Groups["a"].Value; 
    var b = m.Groups["b"].Value; 
    var aVal = int.Parse(a); 
    var bVal = int.Parse(b); 
} 
2

這個怎麼樣?

int[] numbers = Regex.Split(Value, @"\D+") 
       .Where(x => x.Length > 0) 
       .Select(int.Parse) 
       .ToArray(); 

注意:這不處理負數或數字與小數。

0

試試下面的代碼

var str = "ab48/2012"; 
      var strArr = string.Join("", str.Skip(2)).Split('/'); 
      Console.WriteLine(strArr[0]); 
      Console.WriteLine(strArr[1]); 
0

怎麼樣的正則表達式福?

int value1, value2; 
var match = Regex.Match(value, @"^[^\d]*(?<value1>[\d]+)/(?<value2>[\d]+)"); 
if (match.Success) 
{ 
    value1 = int.Parse(match.Groups["value1"].Value); 
    value2 = int.Parse(match.Groups["value2"].Value); 
} 
相關問題