gpt4 book ai didi

c# - 找到一组单词并用一个单词替换它们

转载 作者:行者123 更新时间:2023-11-30 17:48:30 25 4
gpt4 key购买 nike

我正在解析一个字符串,例如

Hello[Left][Left]This is a test string[Left][Left][Left][Left]

我想找到 [Left][Left] 的多个模式并替换它们,这样输出就变成了

Hello[Left x 2]This is a test string[Left x 4]

执行此操作的最有效方法是什么?

最佳答案

这是一个更短的版本。

var word = "Left";
var source = "Hello[Left][Left]This is a test string[Left][Left][Left][Left]";
var replaceRegex = new Regex("(\\[" + word + "\\])\\1+");
var result = replaceRegex.Replace(source, delegate(Match m)
{
return string.Format("[{0} x {1}]"
, word
, m.Groups[0].ToString().Length / m.Groups[1].ToString().Length);
});

发生的是我使用正则表达式元素 \n,其中 n 引用第 n 个捕获的组。然后,一个简单的 MatchEvaluator 让我们计算出该词存在的实例数。我使用整个匹配组 (m.Groups[0]) 的长度除以捕获组 (m.Groups[1]) 的长度,但您可以想改变这个计算。

您甚至可以捕获多个单词、不同的单词等...调整正则表达式可以让您捕获重复单词之间的空格等...

编辑:这是一个将括号集成到“单词”中的版本,因为我不喜欢让括号乱扔代码

var word = "[Left]";
var compressedWord = "[Left x {0}]";
var source = "Hello[Left][Left]This is a test string[Left][Left][Left][Left]";
var replaceRegex = new Regex("(" + Regex.Escape(word) + ")\\1+");
var result = replaceRegex.Replace(source, delegate(Match m)
{
return string.Format(compressedWord
, m.Groups[0].ToString().Length / m.Groups[1].ToString().Length);
});

关于c# - 找到一组单词并用一个单词替换它们,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22987408/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com