2013-12-07 70 views
-1

此代碼有問題。它不會提取所需的正則表達式的值。我把正則表達式提取percentage但代碼不輸入IF(match.Success)條件。代碼不輸入if(match.Success)

for (int l = 0; l < resplitted.Length; l++) 
{ 
    //MessageBox.Show(resplitted[l]); 
    Regex regex = new Regex(@"^0*(100\.00|[0-9]?[0-9]\.[0-9]{2})%$"); 

    Match match = regex.Match(resplitted[l]); 

    if (match.Success) 
    { 
     bsc =double.Parse(match.Value); 
     MessageBox.Show(bsc.ToString()); // I want here something like 90%,10.1% etc. 

    } 

} 
+2

這意味着匹配不成功。 「resplitted」中的字符串是什麼? – dasblinkenlight

+0

它的字符串數組實際上,它有時候是90%,年齡,名字等。當它的90%我想休息時。 –

+2

@FaisalAshfaq當然那些不匹配,你的正則表達式在分隔符後需要兩位小數:) – hvd

回答

1

你要匹配像90%條目,但是你的正則表達式需要一個小數點,並準確後兩位數字了。

改變你的正則表達式這樣使小數部分可選:

@"^100(\.0{1,2})?|[0-9]{1,2}(\.[0-9]{1,2})?%$" 

這裏是一個演示:

Regex regex = new Regex(@"^100(\.0{1,2})?|[0-9]{1,2}(\.[0-9]{1,2})?%$"); 
foreach (var s in new[] {"100.00%","0%","100%","100.0%","90%", "90.1%", "9.00%", "0.1%"}) { 
    Match match = regex.Match(s); 
    Console.WriteLine(match.Success); 
} 

Demo on ideone.

+0

我認爲你放錯了你的括號,'(\。[0-9]){1,2}'匹配'.9.9'而不是'.99'。匹配「100.0」也是可取的。 – hvd

+0

@ DasblinkLight - 仍然出現問題。請再次查看。謝謝 –

+0

@FaisalAshfaq看看變化 - 這應該解決問題。 – dasblinkenlight

0

你可以使用這個(沒有必要把循環內的正則表達式定義):

Regex regex = new Regex(@"^(?:100|[1-9][0-9]?|0)(?:\.[0-9]?[1-9])?%$", RegexOptions.Compiled); 

for (int l = 0; l < resplitted.Length; l++) { 
    Match match = regex.Match(resplitted[l]); 

    if (match.Success) { 
     bsc =double.Parse(match.Value); 
     MessageBox.Show(bsc.ToString()); 
    } 
} 

注意:使用此模式時,不允許使用大於100的值。如果您想允許尾隨零(100.00%),您可以將最後一組更改爲(?:\.[0-9]{1,2})