2010-12-17 116 views
3

我有一個HTML中的字符串(3中的1-3)旅行我如何獲得數字3(旅行前)並將其轉換爲int.I想要將其用作計數如何從C#中的字符串中獲取數字

發現這個代碼

public static string GetNumberFromStr(string str) 
{ 
    str = str.Trim(); 
    Match m = Regex.Match(str, @"^[\+\-]?\d*\.?[Ee]?[\+\-]?\d*$"); 
    return (m.Value); 
} 

但它只能得到1號

+2

對不起請你能澄清一下。你有一個像「123」這樣的字符串,你想將所有的數字提取到一個int? – 2010-12-17 09:45:52

+0

他明確指出這個字符串是「1-3的3次旅行」。 (該問題不顯示是否被編輯) – RvdK 2010-12-17 09:48:01

+1

對於非母語人士:什麼是「3之1-3行程」?你能給個例子嗎? – k3b 2010-12-17 09:54:43

回答

12

正則表達式是在你的情況下不必要的開銷。試試這個:讓Google

int ExtractNumber(string input) 
{ 
    int number = Convert.ToInt32(input.Split(' ')[2]); 
    return number; 
} 

其他有用的方法:

// throws exception if it fails 
int i = int.Parse(someString); 

// returns false if it fails, returns true and changes `i` if it succeeds 
bool b = int.TryParse(someString, out i); 

// this one is able to convert any numeric Unicode character to a double. Returns -1 if it fails 
double two = char.GetNumericValue('٢') 
+0

優秀點。 :) – Chris 2010-12-17 09:58:37

+0

感謝這工作:) butcan你解釋這部分.Split('')[2] – someguy 2010-12-20 10:52:05

+0

@someguy - input.split在這種情況下分割字符串的空間(''),並返回一個字符串的arrray發現源字符串中的空格之間。然後,[2]然後索引數組中的第3個字符串,這是OP的問題中的數字3。 – 2013-04-23 20:09:26

0

如果我正確讀取你的問題,你會得到一個字符串,它是一個單一位數其次是「旅行'並且你想得到數字值?

public static int GetTripNumber(string tripEntry) 
{ 
    return int.Parse(tripEntry.ToCharArray()[0]); 
} 
+0

tripEntry將是'1-3的3行程':因此返回值是1,但是它應該是3(第二個) – RvdK 2010-12-17 13:15:49

+0

@PowerRoy--這已經變得很明顯,但當我回答時不太清楚,對不起。對於你提到的情況,這顯然不起作用。 – Paddy 2010-12-17 14:05:12

1

試試這個:

public static int GetNumberFromStr(string str) 
{ 
    str = str.Trim(); 
    Match m = Regex.Match(str, @"^.*of\s(?<TripCount>\d+)"); 

    return m.Groups["TripCount"].Length > 0 ? int.Parse(m.Groups["TripCount"].Value) : 0; 
} 
0

不是真的知道你的意思,你總是有「(Y旅行的XY)」爲您解析字符串的一部分。 ..如果你看看這個模式,它只能捕捉到「xy」部分,並且接受.Ee + - 作爲分隔符。如果你想捕捉「y行程」部分,你將不得不看另一個正則表達式。

你可以做一個簡單的,如果你改變了返回類型爲int,而不是字符串:

Match m = Regex.Match(str, @"(?<maxTrips>\d+)\sTrip"); 
return m.Groups["maxTrips"].Lenght > 0 ? Convert.ToInt32(m.Groups["maxTrips"].Value) : 0; 
2

忘記正則表達式。此代碼使用空格作爲分隔符分割字符串,並獲取索引2位置中的數字。

string trip = "1-3 of 3 trip"; 
string[] array = trip.Split(' '); 
int theNumberYouWant = int.Parse(array[2]); 
1

另一種方式來做到這一點:如何使用

public static int[] GetNumbersFromString(string str) 
{ 
    List<int> result = new List<int>(); 
    string[] numbers = Regex.Split(input, @"\D+"); 
    int i; 

    foreach (string value in numbers) 
    { 
     if (int.TryParse(value, out i)) 
     { 
     result.Add(i); 
     } 
    } 

    return result.ToArray(); 
} 

實施例:

const string input = "There are 4 numbers in this string: 40, 30, and 10."; 
int[] numbers = MyHelperClass.GetNumbersFromString(); 

for(i = 0; i < numbers.length; i++) 
{ 
    Console.WriteLine("Number {0}: {1}", i + 1, number[i]); 
} 

輸出:

數:4

:40

號碼:30

號碼:10

感謝:http://www.dotnetperls.com/regex-split-numbers

相關問題