2010-07-16 162 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); 
} 
相关问题