我可以将正则表达式问题([\\ d] * $)和([\\ d] *)c $结合起来

时间:2009-08-11 11:12:57

标签: c# .net c++ regex vb.net

我有两个关于正则表达式的简单问题。

拥有字符串$10/$50,我希望获得50,它始终位于字符串的末尾。所以我做了:([\\d]*$)

拥有字符串50c/70c我想得到70,它总是在字符串的末尾(我希望它没有c),所以我做了:([\\d]*)c$

两者似乎都符合我的要求,但实际上我想用它做两件事:

  • a)我想两者都放在一起 字符串(可能吗?)。我试过了 |但它似乎没有用。
  • ** b)**如果确实可以做a), 我想知道是否有可能 格式化文本。如你所见,两者兼而有之 对于美元和美分,我会 使用正则表达式检索 字符串显示的值。但同时 在我们正在处理的第一种情况下 美元,在我们正在交易的第二个 有美分,所以我想改造 50美分到0.5。是否可能,或 我必须自己编码吗?

6 个答案:

答案 0 :(得分:5)

对于两种情况的匹配,你基本上都说“c”是可选的。然后用“?”这意味着“前一个字符的零或一个匹配”。这应该给你以下:

([\d]*)c?$

希望有所帮助。

答案 1 :(得分:3)

(a)很容易:

(\d+)c?$

(b)你不能用正则表达式。

答案 2 :(得分:2)

提供这些是Perl风格的正则表达式(我实际上并不知道C#/ .net):

(\d+(?=c$)|(?<=\$)\d+$)

在正则表达式匹配之外,可能需要格式化文本。

答案 3 :(得分:2)

(\ $?[\ d] +)C

以下内容将匹配段落中的一个匹配。使用以下工具查看以下示例文本

http://gskinner.com/RegExr/

示例文字

这是字符串50c / 70c $ 10 / $ 50

这是50c / 70c $ 9 / $ 50的字符串 这是字符串50c / 70c $ 8 / $ 50

这是字符串50c / 70c $ 7 / $ 50

这是字符串50c / 70c $ 6 / $ 50

这是字符串50c / 70c $ 5 / $ 50

答案 4 :(得分:2)

您现有的正则表达式可以简化:

([\d]*$)        ([\d]*)c$

你不需要方形支持

(\d*$)          (\d*)c$

但我建议你要求你的号码至少有数字,所以用+而不是*

(\d+$)          (\d+)c$

现在你可以将两者结合在一起:

(\d+)(c?)$

我不建议在正则表达式中进行计算。 我们在第二个括号中捕获了'c',因此我们可以使用这些信息。 这就是perl中整个事情的样子,请适当地调整:

if( m/(\d+)(c?)$/ ) {

   if( $2 eq 'c' ) {
       $dollars = $1/100;
   } else {
       $dollars = $1;
   }

   print "$_ are $dollars dollars\n"

}

正如我上面评论的那样:计算器可以在正则表达式/替换中完成

s/.*?(\d+)(c?)$/$1*($2?0.01:1)/e 

但这可能有点混淆

答案 5 :(得分:0)

其他人指出(\ d +)(c?)$满足a)。

但我认为没有理由不通过替换语句来进行格式化:

s/(\d)0c/0,$1/
s/(\d\d)c/0,$1/
s/(\d)c/0,0$1/