2011-04-28 187 views
1

我對正則表達式不太擅長,並且試圖用它們來格式化數字。C#正則表達式編號格式

原始數字將類似於05XX-123,並且我想追加零使其成爲05XX-000123(連字符後面的數字應該有零,直到其長度爲六)。如果我混正則表達式和字符串操作我可以用下面的解決方案。然而實現這一目標...

Regex regex = Regex(@"^([0-9]{2})([A-Za-z]{2})-([0-9]*)$"); 
Match match = regex.Match("05XX-123"); 
string result = match.Groups[1].Value + match.Groups[2].Value + "-" + match.Groups[3].Value.PadLeft(6, '0'); 

,我想避免第三行,因爲我想這些變化能夠在運行時進行定義。

這似乎應該是可能的,但我不太清楚如何在第三組(字母后面的數字)前加零。

Regex regex = Regex(@"^([0-9]{2})([A-Za-z]{2})-([0-9]*)$"); 
string result = regex.Replace("05XX-123", "$1$2-$3"); 

顯然上面的例子只是返回相同的值被提供,但好像我應該能夠做一些事情到$ 3組預先設置爲零,使$ 3'S長度六人。

任何幫助將不勝感激,謝謝!

回答

4

試試這個(除非你需要的正則表達式別的東西):

string[] parts = originalNumber.Split(new char[] {'-'}); 
string newNumber = parts[0] + "-" + parts[1].PadLeft(6, '0'); 

編輯:

不同的正則表達式的選擇:

Regex regEx = new Regex(@"^([0-9]{2}[A-Z]{2}\-)([0-9]*)$", RegexOptions.IgnoreCase); 
string result = regEx.Replace("05XX-123",m => m.Groups[1].Value + m.Groups[2].Value.PadLeft(6, '0')); 
+0

這工作,但我想徹底避免字符串操作。原因是我希望在運行時定義轉換。 – majorpayne27 2011-04-28 03:41:13

+0

@ majorpayne27:在運行時構造正則表達式並不比改變字符串函數的參數容易IMO – Dyppl 2011-04-28 03:46:40

+0

使用字符串函數肯定會更容易,但它不是我可用的選項。我需要能夠在不重新編譯的情況下更改輸出格式。 – majorpayne27 2011-04-28 03:57:12