我正在编写一个方法来获取DevExpress“filter”字符串并将其转换为可用的SQL字符串。在大多数情况下,这里或那里简单的字符串替换很容易。然而,有一件事让我摸不着头脑,因为我没有花时间在C#/ .NET中学习正则表达式。
当使用十进制数时,DevExpress会发出类似“FieldName> 2.0m”的字符串。问题是小数点,在数字的末尾是“m”。我需要采用格式###。### m的所有子串并将它们更改为###。###(其中位数是可变的)。如果我没记错的话,匹配这个数字会是这样的:
[0-9,.]*
但是我如何在末尾查找带有“m”的数字,如何使用Regex类生成一个删除了m的新字符串?
谢谢!
答案 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 ###.###