有点奇怪的问题 - 我希望避免一些非常丑陋的编程,并认为某人可能有一种漂亮的方式来做这件事......
我正在研究一个与字符串中的数字匹配的正则表达式,比如说“222”。有时这些数字包括小数,“222.5”或有时代替'.5'它被替换为加号 - 即。 222+。
关于如何编写正则表达式或一般C#行的任何想法,可以将任何数字后面的'+'符号解释为.5?以下是我当前代码的示例(不对'+'符号执行任何操作)。
string match = Regex.Match(subject, @"\s*-?\d+").Value;
答案 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");