猿问

用正则表达式替换字符串中项目的特定实例

我正在尝试构建一个解析器,该解析器将替换字符串的特定实例。因此,例如,我有一个字符串sn+sn+sn*9,并且我只想替换snregex的第三个实例?


我试过了


var expression = "sn+sn+sn*9";

var regex = new Regex("sn");

expression = regex.Replace("sn",4.ToString());

//expression = regex.Replace("sn",4.ToString(),1,2);

提前致谢


DIEA
浏览 202回答 3
3回答

猛跑小猪

int x = 0; string repl = "ANYTHING"; string s = Regex.Replace("sn+sn+sn*9", "sn", m => (++x) == 3 ? repl : m.Value);解释该x变量用于跟踪搜索文本的出现。Regex一旦发现第三次出现,MatchEvaluator委托就会将该字符串替换为repl变量中的任何内容。否则,它仅返回找到的相同字符串。

12345678_0001

这是一个使用以下正则表达式模式的选项:(?<=.*?\bsn\b.*?\bsn\b.*?)\bsn\bsn当我们之前已经sn在字符串中看到两个术语时,该模式从字面上说是将替换为一个术语。blah尽管您可以使用任何所需的值,但我在下面的示例代码中使用了替换项。var term = @"sn";var replacement = "blah";var expression = term + "+" + term + "+" + term + "*9";var pattern = @"(?<=.*?\b" + term + @"\b.*?\b" + term + @"\b.*?)\b" + term + @"\b";var exp_trim = Regex.Replace(expression, @pattern, replacement);Console.WriteLine(exp_trim);sn+sn+blah*9演示版
随时随地看视频慕课网APP
我要回答