通常我可以解决方法并让自己完成所有工作,但这个有点棘手,甚至msdn引用和示例混淆不仅仅是帮助。 我测试了一些代码并坚持混合捕获分组以便与非捕获组进行更改,以便在我希望时停止匹配
我想要更改的更简单的代码是:
stats = "label:100,value:7878,label:110,value:7879,something,label:200,value:8888";
valor = "value:8080";
我知道我是否使用
pattern = @"value:(\d+)";
我可以将每个值编号更改为8080
Regex.Replace(stats, pattern, valor);
但我需要他在找到'某事'字符串时停止更改这些
我设法将每个字母变为'勇敢',直到他找到'某事'使用
pattern = @"^(?:(?!something).)*";
有没有办法只将'value:(\ d +)'数字改为'valor',再加上?:(?!something)来停止同一句话中的匹配? 我已经看过很多例子,但他们从来没有说过这样的话,所以我不知道是否有可能同时合并这两个条件
答案 0 :(得分:1)
您可以使用后备解决方案,确保在值之前没有something
:
(?<!\bsomething\b.*)value:\d+
请参阅demo
请注意,由于something
字边界,\b
与整个字匹配。
替换操作的结果:
请注意(?:(?!something).)
效率非常低,应该在没有其他方法有效时使用。在.NET中,有一个强大的可变宽度后视,这是此任务的正确工具。
另请注意,如果您不使用捕获组反向引用,则不需要在模式中捕获这些组(我从\d+
左右删除括号。)