我在这样的文件中有一行:
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
这样做的一种方法是捕获除第三个小数之外的所有内容:
(^NORMFLY \d+(?:.\d{1,2})? \d+(?:.\d{1,2})? )\d+(?:.\d{1,2})?
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^++++++++++++++++
captured not captured
然后你可以用"$1" + someRandomNumber
替换它。 $1
指的是第一个捕获组,在这种情况下,除了第三个小数之外的所有东西。
不需要正则表达式:
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:不需要时不要使用正则表达式。