为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

C#
DIEA 2021-05-11 17:14:45
我正在尝试构建一个解析器,该解析器将替换字符串的特定实例。因此,例如,我有一个字符串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);提前致谢
查看完整描述

3 回答

?
猛跑小猪

TA贡献1858条经验 获得超8个赞

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变量中的任何内容。否则,它仅返回找到的相同字符串。


查看完整回答
反对 回复 2021-05-29
?
12345678_0001

TA贡献1802条经验 获得超5个赞

这是一个使用以下正则表达式模式的选项:


(?<=.*?\bsn\b.*?\bsn\b.*?)\bsn\b

sn当我们之前已经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

演示版



查看完整回答
反对 回复 2021-05-29
  • 3 回答
  • 0 关注
  • 201 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信