【问题标题】: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”。

【讨论】:

  • 对不起,我没有提到我想用 C# 来做
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多