正则表达式 - 在寻找小数时包括'+'

时间:2011-12-14 21:17:41

标签: c# regex

有点奇怪的问题 - 我希望避免一些非常丑陋的编程,并认为某人可能有一种漂亮的方式来做这件事......

我正在研究一个与字符串中的数字匹配的正则表达式,比如说“222”。有时这些数字包括小数,“222.5”或有时代替'.5'它被替换为加号 - 即。 222+。

关于如何编写正则表达式或一般C#行的任何想法,可以将任何数字后面的'+'符号解释为.5?以下是我当前代码的示例(不对'+'符号执行任何操作)。

string match = Regex.Match(subject, @"\s*-?\d+").Value;

2 个答案:

答案 0 :(得分:2)

好的,假设你正在使用正则表达式进行搜索,我会改变你的正则表达式来找到这样的加号:

\s*-?\d+\+?

请注意,\+与加号匹配,?使其成为可选项。

现在,我将把部分包装成“捕获”并提取值。

\s*(-?\d+)(\+)?

括号允许您提取匹配的组成部分。

所以,现在你可以:

var match = Regex.Match(subject, @"\s*(-?\d+)(\+)?");
var value = decimal.Parse(match.Groups[1].Value);
value += match.Groups[2].Success ? 0.5M : 0.0M;

如果您需要能够匹配“0.5”或“.5”等值,则可以将最终产品中的\d+更改为:

(?:\d*\.)?\d+

答案 1 :(得分:1)

string match = Regex.Match(subject, @"-?(\d+((\.\d+)|\+)?)|(\.\d+)").Value
    .Replace("+", ".5");