C# - 如何将“文本文本542050.0000文本文本”转换为“文本文本542050文本文本”?

时间:2017-12-02 06:04:03

标签: c# regex string

如何转换以下字符串:

string x = "text text 542050.0000 text 245.00 text";

至:“文本文本542050文本245文本”

我想保留此字符串中的所有文本,只删除数字的小数部分

1 个答案:

答案 0 :(得分:1)

如果要解决在字符串中删除小数的一般情况,可以使用RegEx:

var input = "text text 542050.0000 text text";
var regex = "((?<keep>[0-9]+)\\.[0-9]+)";
var matchEvaluator = new System.Text.RegularExpressions.MatchEvaluator((m) => m.Groups["keep"].Value);
var output = System.Text.RegularExpressions.Regex.Replace(input, regex, matchEvaluator);

RegEx将匹配所有小数,并返回整个部分作为替换。请注意,如果你有一个像5.2.1这样的字符串,那么这将导致“5.1”。

如果您想输出特定数量的小数位,可以试试这个:

var input = "text text 542050.0129 text text";
var regex = "([0-9]+\\.[0-9]+)";
var matchEvaluator = new System.Text.RegularExpressions.MatchEvaluator((m) => {
    var decimalValue = double.Parse(m.Groups[0].Value);
    return String.Format("{0:0.000}", Math.Round(decimalValue, 3));
});
var output = System.Text.RegularExpressions.Regex.Replace(input, regex, matchEvaluator);

在我的例子中,我已经四舍五入到3 dp并用3 dp格式化(格式化以确保它总是输出.000 - 如果你不需要它你可以删除这一步)。对于上面的“542050.0129”,它将输出“542050.013”