2016-10-18 47 views
3

我有一些輸入是一個整數,它存儲爲一個可能有1或2位數的字符串。我想知道是否有可能提出一個正則表達式模式和替換字符串,它允許我在任何只有一個數字的輸入前添加0。在正則表達式中使用2位數的替換數

即。我想找到的圖案和SUBST這樣的:

Regex.Replace("1",pattern,subst); // returns "01" 
Regex.Replace("31",pattern,subst); // returns "31" 

編輯:問題是特定於C#正則表達式。請不要回答提供的替代方法

+0

你爲什麼不使用功能與string.replace有你沒有或不能使用的原因..? – MethodMan

+0

'Regex.Replace(num,r「\ b(\ d)\ b」,「0 $ 1」);' – anubhava

+0

@MethodMan:是的,我只能訪問某些配置,我不能更改代碼 –

回答

4

使用正則表達式,你可以使用在一個單一的數字字邊界:

string num = "5"; 
Regex.Replace(num, @"\b\d\b", "0$&"); 
//=> 05 

num = "31"; 
Regex.Replace(num, @"\b\d\b", "0$&"); 
//=> 31 

Code Demo

正則表達式\b\d\b將匹配任何一方與字邊界一個單一的數字以確保我們只匹配一個數字。

More Infor about Word boundary


如果數字可以出現在字的中間,那麼你可以使用正則表達式lookarounds像這樣:

num = Console.WriteLine(Regex.Replace(num, @"(?<!\d)\d(?!\d)", "0$&")); 
+0

哦,我明白了... Mmh ... –

+1

請注意,單詞邊界不會讓您匹配單詞中間的一大塊數字。另外,沒有意義用捕獲組包裝整個模式,可以用替換模式中的'$&'引用匹配值並使用Regex.Replace(num,@「\ b \ d \ b」, 「0 $ &");',它也會這樣做 –

+0

OP沒有提及數字是否可以出現在單詞的中間如果是這樣的話我們就需要使用lookarounds確實, $&'(感謝編輯) – anubhava