【问题标题】:Using RegEx to find and replace doubles使用 RegEx 查找和替换双打
【发布时间】:2009-12-06 07:36:46
【问题描述】:
我想用附加“c”字母的双精度值替换字符串中的所有双标记。有没有简单的方法来做到这一点?我认为正则表达式是要走的路
例如,我想更改以下内容
treand60(12.3)/1010 + 1 >1010
与
treand60(12.3c)/1010c + 1c >123c
任何建议
【问题讨论】:
标签:
c#
.net
regex
replace
【解决方案1】:
基本上,您希望查找所有可选以小数点结尾的数字序列和另一个数字序列,然后附加一个“c”。这是一个示例,假设您使用的是 Perl(您的问题没有说):
$_ = 'treand60(12.3)/1010 + 1 >1010';
s/\b\d+(?:\.\d+)?/$&c/g;
print; # output is "treand60(12.3c)/1010c + 1c >1010c"
\d+ 是一位或多位数字,然后\.\d+ 是小数点后一位或多位数字。 (?: ... ) 是 non-capturing group。最后一个? 表示“匹配零个或其中之一”(即它是可选的)。 \b 表示仅在单词边界上匹配(这会阻止诸如“Hello123”之类的匹配,因为数字直接位于单词字符之后)。
这是 C# 的等价物:
using System.Text.RegularExpressions;
// ...
string input = "treand60(12.3)/1010 + 1 >1010";
Regex regex = new Regex(@"\b\d+(?:\.\d+)?");
string output = regex.Replace(input, (m) => m.Value + 'c');
Console.WriteLine(output); // prints "treand60(12.3c)/1010c + 1c >1010c"
Regex.Replace 调用中的 lambda 表达式是 MatchEvaluator,它只是获取匹配文本并附加一个“c”。