2010-07-16 63 views
4

使用正則表達式。試圖讓只有號碼的最後x位數和0填充必要使用正則表達式剪掉最後幾個數字

考慮下面的輸入

1234 
123 
12 
1 

編輯:作爲字符串值

我試圖讓這些將分別出現正則表達式表達(或幾個正則表達式,理想只是一個單一的) 產量

34 
23 
12 
01 

我是一個有點新的正則表達式和backre費林,還有一點點摸索。關於去哪兒看什麼或者可以做什麼的任何想法?

感謝

EDIT對於澄清: 在.net的System.Text.Regex.Replace()函數 可以使用這些值的任何可能會在作爲輸入參數。

編輯:謝謝你的思想大家。看來這不能在正則表達式中完成。悲傷,因爲它是。

+2

在什麼語言? – 2010-07-16 19:55:33

+0

這將直接針對.NET的正則表達式處理器。 我真的只是尋找一個正則表達式Regex.Replace執行此。 – Beta033 2010-07-16 20:04:26

+2

正在使用正則表達式的要求嗎?如果不是,它會更容易。 – 2010-07-16 20:19:38

回答

1

如果必須使用正則表達式這可以,如果你使用MatchEvaluator來完成,但是這將是最好不要使用正則表達式完成這個任務。

既然你表示不使用正則表達式的解決方案是可以接受的,在這裏是做在C#中的一種方式,不使用正則表達式:

void Run() 
{ 
    string s ="1234"; 
    s = lastXDigits(s, 3); 
    Console.WriteLine(s); 
} 

string lastXDigits(string s, int x) 
{ 
    if (s.Length < x) 
    { 
     return s.PadLeft(x, '0'); 
    } 
    else 
    { 
     return s.Substring(s.Length - x); 
    } 
} 

結果爲您的每個輸入:

 
234 
123 
012 
001 
+0

我認爲你需要\ d {0,x}或者你會錯過少於x位的任何東西。 – cape1232 2010-07-16 20:05:19

+0

@ cape1232:我沒有看到填充值應該變化的要求。我會更新。 – 2010-07-16 20:06:20

+0

我想我會用這種方法。似乎我不能真正做我想要的正則表達式。 – Beta033 2010-07-29 17:39:32

0

你可以做的是使用.substring(int start, int length),然後格式化字符串爲2個字符長,但除非你指定的語言,我們的手都有點忙。

0

這不會墊零,但似乎工作(在JavaScript測試):

/[0-9]{1,2}$/ 
1

根據您的其他問題,我假設你正在使用VB.Net。

你並不需要一個正則表達式;您可以使用字符串處理:

Dim str As String 

If str.Length > 2 Then str = str.Substring(str.Length - 2) 
str = str.PadLeft(2, '0'c) 
+0

對於非正則表達式的方法+1(事實證明它畢竟不是要求)。 – 2010-07-16 20:43:28

0

您使用哪種語言? ..這可能會更容易沒有正則表達式。

例如,你繼承人如何在PHP中做到這一點:

$arr = array(1234,123,12,1); 

foreach($arr as $num) 
{ 
    echo '<br />'.str_pad(substr($num,-2), 2, "0", STR_PAD_LEFT); 
}