C#Regex替换系列中的特定小数

问题描述 投票:0回答:2

我在这样的文件中有一行:

NORMFLY 306130.10 199963.09 5000.00 300.00

我想用C#regex用随机小数替换系列中的第三个小数。第3个小数的值可能因不同的行而异。 ^NORMFLY \d+(\.\d{1,2})? \d+(\.\d{1,2})? \d+(\.\d{1,2})?将匹配到第3个小数的结尾,但我无法弄清楚如何用不同的东西替换匹配。

例如,改变:

NORMFLY 306130.10 199963.09 **5000.00** 300.00

NORMFLY 306130.10 199963.09 **7690.56** 300.00

c# regex replace decimal
2个回答
1
投票

这样做的一种方法是捕获除第三个小数之外的所有内容:

(^NORMFLY \d+(?:.\d{1,2})? \d+(?:.\d{1,2})? )\d+(?:.\d{1,2})?
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^++++++++++++++++
captured                                     not captured

然后你可以用"$1" + someRandomNumber替换它。 $1指的是第一个捕获组,在这种情况下,除了第三个小数之外的所有东西。

Try it online.


0
投票

不需要正则表达式:

var line = @"NORMFLY 306130.10 199963.09 5000.00 300.00";

var split = line.Split(' ').ToArray();
split[3] = 123.45m.ToString();//random goes here
var result = string.Join(" ", split);

Console.WriteLine(result);//NORMFLY 306130.10 199963.09 123.45 300.00

PS:不需要时不要使用正则表达式。

© www.soinside.com 2019 - 2024. All rights reserved.