我有两个关于正则表达式的简单问题。
拥有字符串$10/$50
,我希望获得50
,它始终位于字符串的末尾。所以我做了:([\\d]*$)
拥有字符串50c/70c
我想得到70
,它总是在字符串的末尾(我希望它没有c),所以我做了:([\\d]*)c$
两者似乎都符合我的要求,但实际上我想用它做两件事:
答案 0 :(得分:5)
对于两种情况的匹配,你基本上都说“c”是可选的。然后用“?”这意味着“前一个字符的零或一个匹配”。这应该给你以下:
([\d]*)c?$
希望有所帮助。
答案 1 :(得分:3)
(a)很容易:
(\d+)c?$
(b)你不能用正则表达式。
答案 2 :(得分:2)
提供这些是Perl风格的正则表达式(我实际上并不知道C#/ .net):
(\d+(?=c$)|(?<=\$)\d+$)
在正则表达式匹配之外,可能需要格式化文本。
答案 3 :(得分:2)
(\ $?[\ d] +)C
以下内容将匹配段落中的一个匹配。使用以下工具查看以下示例文本
示例文字
这是字符串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/