如何使用C#Regular Expression对象进行此替换?

时间:2010-03-02 20:09:31

标签: .net regex

我正在编写一个方法来获取DevExpress“filter”字符串并将其转换为可用的SQL字符串。在大多数情况下,这里或那里简单的字符串替换很容易。然而,有一件事让我摸不着头脑,因为我没有花时间在C#/ .NET中学习正则表达式。

当使用十进制数时,DevExpress会发出类似“FieldName> 2.0m”的字符串。问题是小数点,在数字的末尾是“m”。我需要采用格式###。### m的所有子串并将它们更改为###。###(其中位数是可变的)。如果我没记错的话,匹配这个数字会是这样的:

[0-9,.]* 

但是我如何在末尾查找带有“m”的数字,如何使用Regex类生成一个删除了m的新字符串?

谢谢!

3 个答案:

答案 0 :(得分:3)

这将匹配此模式后的字符串 - 一个或多个数字,后跟.,后跟一个或多个数字,后跟m

\d+\.\d+m

请参阅this方便的备忘单。

为了能够引用原始数字(不包含m),您需要使用()捕获匹配(captured group)以获得反向引用:

(\d+\.\d+)m

现在可以替换:

RegEx.Replace(source, @"(\d+\.\d+)m" ,"$1");

$1是指第一个被捕获的群组。

答案 1 :(得分:3)

Regex.Replace(source, @"(\d+\.\d+)m", "$1");

答案 2 :(得分:2)

Regex re = new Regex(@"(\d+\.\d+)m");
foreach (Match m in re.Match(str))
   m.Groups[1]; //will contain ###.###