用于替换值的 REGEX 帮助

Posted

技术标签:

【中文标题】用于替换值的 REGEX 帮助【英文标题】:REGEX help for replacing a value 【发布时间】:2021-08-24 06:05:49 【问题描述】:

我有下面的 Json,它的值具有 -INF,我需要用“Infinity”替换 INF。下面是对我有用的示例 JSON 和 REGEX。我正在寻找可以优化以下方法的方法,以及是否可以使用单个 Regex 而不是两个。

Json 示例:"Power_dB":[-INF,-1000,-1000,-1000,-INF,-INF,-INF,-INF]

我的代码:

                var pattern = @"-(INF)1,";
                var secondPattern = @"-(INF)1\]";
                string replacement = "-Infinity,";
                string secondreplacement = "-Infinity]";
                string result = Regex.Replace( json, pattern, replacement );   
                result = Regex.Replace( result, secondPattern, secondreplacement );
                
                var settings = new JsonSerializerSettings()  FloatFormatHandling = FloatFormatHandling.Symbol ;
                var data = JsonConvert.DeserializeObject<JObject>( result, settings ) ;

上面的代码给了我想要的输出,如下所示:

"Power_dB":["-INFINITY",-1000,-1000,-1000,"-INFINITY","-INFINITY","-INFINITY","-INFINITY"]

【问题讨论】:

您应该使用正向前瞻,而不是捕获,]。或者将它们作为一个组捕获并使用反向引用使其成为替换字符串的一部分。 【参考方案1】:

我建议将您的表达式更改为:

-INF(?=[,\]])

分解:

-INF - 匹配文字“-INF” (?=something) - 积极的前瞻。表达式仅在 this 也匹配时才匹配,但这不会捕获。 [,\]] - 匹配 ,]。在这种情况下,我们后面没有修饰符,因此它只会匹配单个字符。

然后你可以简单地用这个替换匹配的部分:

-Infinity

C#代码:

var regex = new Regex(@"-INF(?=[,\]])");
string input = "\"Power_dB\":[-INF,-1000,-1000,-1000,-INF,-INF,-INF,-INF]";
string result = regex.Replace(input, "-Infinity");
Console.WriteLine(result);

Try it online

【讨论】:

以上是关于用于替换值的 REGEX 帮助的主要内容,如果未能解决你的问题,请参考以下文章

用于过滤和替换异常值的循环

用于替换表中的值的宏

我只想将 regex_replace 用于第一个字符(电话号码)

Regex.Replace 替换空匹配

字符串替换函数

正则表达式 [REGEX] - 替换/替换 - 捕获组 1 和 2 中的内容