如何使用正则表达式删除字符串中的小数点?

时间:2016-12-13 20:09:18

标签: c# .net regex linq

我想将字符串格式化为删除小数并且仅保留整数,但小数点后面包含一些后续零。如何格式化它以使那些0消失?

我有输入字符串数据:

var xRaw= ",String30.0,String1.0,String0.0,String-1.0,StringOFF".Split(',').ToList();

如何摆脱格式:"30,1,0,-1,OFF"

var ValuesString = xRaw.Select(x => Regex.Replace(x, "[^OF0-9-,\\.]", "")).ToList()
    .Where(s => !string.IsNullOrWhiteSpace(s)).ToList();

以上正则表达式将删除字符串并保留所需的字符串" OFF"但它保留了另一个紧挨着"。"点。

4 个答案:

答案 0 :(得分:1)

您可以通过简单地添加BOOST_ROOT_DIR替代方法来修复您的模式(如果它对你来说足够好),也可以删除浮点数的小数部分。

\.[0-9]+

更好的选择是将@"[^OF0-9-,.]|\.[0-9]+". 作为字符的序列,而不仅仅是OFFO

F

此处,Regex.Replace(x, @"(OFF)|[^0-9-,.]|\.[0-9]+", "$1") 被捕获到第1组,OFF反向引用将其恢复到结果字符串中。

答案 1 :(得分:0)

嗯......我认为这适合你的输入字符串。在不知道可能发生什么变化的情况下,无法知道它是否适用于您可能获得的所有数据。

var xRaw= ",String30.0,String1.0,String0.0,String1.0,StringOFF";
string result = String.Join(",", 
                   Regex.Matches(xRaw, "\\d+.?\\d*|OFF")
                        .Cast<Match>()
                        .Select(m => {
                                        decimal d;
                                        if(decimal.TryParse(m.Value, out d))
                                            return ((int)d).ToString();
                                        return m.Value;
                                     }));

答案 2 :(得分:0)

这是一个简单的解决方案:

var input = ",String30.0,String1.0,String0.0,String-1.0,StringOFF";
var output = Regex.Replace(Regex.Replace(input, @"[^OF\-\d.,]", ""), @"\.\d", "").TrimStart(',');

工作示例:https://dotnetfiddle.net/8IordG

答案 3 :(得分:0)

string giventxt = "text text 54654654200500.0000 text text";
string[] arry = giventxt.Split('.');
string arry1 = arry[1];
string[] arry2 = arry1.Split(' ');
string completestr = arry[0] + " " + arry2[1] + " " + arry2[2];