2013-11-22 37 views
0

我需要一些幫助,使用正則表達式將數字重新格式化爲貨幣。我的輸入將是字符串「123」或「123.45」。我想用「123.00」替換「123」,並保留「123.45」。正則表達式也將用於驗證輸入,所以「123」和「123.45」都應該匹配。我已經用SSN做過這樣的事情,我將9位數字的字符串重新格式化爲nnn-nn-nnnn格式,但貨幣字符串正在困擾着我。正則表達式用貨幣替換數字

對於SSN我的正則表達式替換字符串是這些:

((?!(000|666))([0-8]\d{2}))-?((?!00)\d{2})-?((?!0000)\d{4})$

$1-$4-$5

這是正則表達式我試圖(甚至可以處理逗號)
([0-9]{1,3}(?:,?[0-9]{3})*)((?:\.[0-9]{2})?)$
更換$ 1的地方是之前的部分。 2美元之後。我想要替換的字符串顯示$ 2,如果有什麼或「.00」,如果$ 2是空的。我該怎麼做?

編輯添加更多上下文:讓我解釋爲什麼我試圖這樣做。我有一些代碼去數據庫並獲取一些字符串並顯示它們。我故意不知道或不在乎那些字符串是什麼。我也可以在文本框中編輯這些字符串。然後人們開始要求以不同於存儲的格式顯示字符串。首先它以表示SSN的字符串開始,123456789應該以123-45-6789的格式顯示和編輯。所以我寫了一些代碼讓我爲每個數據庫字符串定義一個正則表達式字符串和一個替換字符串。這些字符串完成重新格式化,再加上正則表達式字符串用於驗證文本框中的輸入。所有這一切對SSN字符串都很好,使用上面列出的正則表達式和替換字符串。現在他們想要將表示貨幣「123」的字符串顯示爲「123.00」。所以我有基礎設施來支持這個,如果我能想出正確的正則表達式字符串和替換字符串。我的代碼不知道這是貨幣。它只是知道它是一個通用字符串,應該在顯示之前進行重寫。

+1

使用哪種腳本或編程語言使用正則表達式? – Bobulous

+0

我正在使用C#。這裏是示例代碼:'正則表達式正則表達式=新的正則表達式(regExpressionString,RegexOptions.Compiled); val = regex.Replace(val,replacementString);' – user3023330

+0

你不能(容易地)用Regex做條件,這超出了Regex設計的範圍。只要你說「我想要這個,如果這是空白的,否則」,你現在已經超出了正則表達式合理的能力。與其試圖將所有功能推入正則表達式的有限容量,爲什麼不使用您可以使用的令人難以置信的強大和多功能的語言(C#)並以這種方式解析字符串? – qJake

回答

0

我不會使用正則表達式,我會使用內置的格式化庫。

Decimal number; 
if(!Decimal.TryParse(inputNumberAsString, CultureInfo.CurrentCulture, NumberFormat.Number, out number) { 
    // Handle error 
} 

return number.ToString(CultureInfo.CurrentCulture, "c"); 
+0

沒錯,有很多方法可以在沒有正則表達式的情況下更容易地完成這個特定的情況。但是我有一個設置,我必須使用任何通用字符串,我什麼都不知道,只用一個正則表達式字符串重寫/驗證它,並用替換字符串顯示它。 – user3023330

+0

@ user3023330然後請重寫您的問題,以便它反映原始問題,而不是此特定情況。 – Dai

+0

我不確定我關注。我原來的問題是,我想使用正則表達式來驗證和重新格式化我的字符串,但我無法確定我的匹配字符串和replacemenet字符串應該是什麼。但我會回去編輯原始問題,以澄清我的輸入是一個字符串。 – user3023330