簡體   English   中英

C#正則表達式匹配十進制

[英]C# Regex.Match to decimal

我有一個字符串“ -4.00%”,我需要將其轉換為小數,以便可以將其聲明為變量並在以后使用。 字符串本身可以在string []行中找到。 我的代碼如下:

foreach (string[] row in rows)
{
string row1 = row[0].ToString();
Match rownum = Regex.Match(row1.ToString(), @"\-?\d+\.+?\d+[^%]");
string act = Convert.ToString(rownum); //wouldn't convert match to decimal
decimal actual = Convert.ToDecimal(act);
textBox1.Text = (actual.ToString());
}

這導致“輸入字符串的格式不正確”。 有任何想法嗎?

謝謝。

我看到這里發生的兩件事可能會有所幫助。

您正在對待正則表達式匹配,就好像您希望它是一個字符串一樣,但是匹配檢索到的是匹配組。

無需將rownum轉換為字符串,而是需要查看rownum.Groups[0]

其次,您沒有要捕獲的括號匹配項。 @"(\\-?\\d+\\.+?\\d+)%"將根據整個批次創建一個捕獲組。 這可能無關緊要,我不知道C#在這種情況下的表現如何,但是如果您開始擴展正則表達式,則將需要使用方括號括起的捕獲組,因此您不妨繼續進行下去。

這是代碼的修改后的版本,可將正則表達式更改為使用捕獲組並顯式查找% 結果,這也將解析簡化為十進制(不再需要中間字符串):

編輯: 根據執行者的建議檢查rownum.Success

string[] rows = new [] {"abc -4.01%", "def 6.45%", "monkey" };

foreach (string row in rows)
{
    //regex captures number but not %
    Match rownum = Regex.Match(row.ToString(), @"(\-?\d+\.+?\d+)%");

    //check for match
    if(!rownum.Success) continue;

    //get value of first (and only) capture
    string capture = rownum.Groups[1].Value;

    //convert to decimal
    decimal actual = decimal.Parse(capture);

    //TODO: do something with actual
}

如果要使用Match類來處理此問題,則必須訪問Match.Groups屬性以獲取匹配項集合。 此類假定出現了多個事件。 如果可以保證總是得到1,而只有1,則可以使用以下方法獲得它:

string act = rownum.Groups[0];

否則,您將需要像MSDN文檔中一樣對其進行解析。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM