c# - 正则表达式匹配所有特定的重复单词

标签 c# regex

我有一个像这样的字符串:

SELECT * FROM blah WHERE ID IN ('<replaced>', '<replaced>', '<replaced>')

其中“<replaced> ”部分是一个字符串,我想匹配 ( 之间的所有内容和 )所以我可以将其替换为“<replacedlist>”。

结果字符串将是

SELECT * FROM blah WHERE ID IN (<replacedList>)

我不想只在括号内做所有事情,因为这将匹配其他字符串,只有当括号包含“<replaced>”并且重复任意次数时。

如果相关,我将使用 C# 来解析它,但我不会标记它,因为这应该是通用正则表达式。

最佳答案

你可以使用这个模式:

(?<=\([^)]*)'<replaced>'(, '<replaced>')*(?=[^)]*\))

如在

var input = "SELECT * FROM blah WHERE ID IN ('<replaced>', '<replaced>', '<replaced>')";
var pattern = @"(?<=\([^)]*)'<replaced>'(, '<replaced>')*(?=[^)]*\))";
var output = Regex.Replace(input, pattern, "<replacedList>");

Console.WriteLine(output); // SELECT * FROM blah WHERE ID IN (<replacedList>)

或者,您可以使用这种模式:

(\([^)]*?)(<replaced>(?:, <replaced>)*)([^)]*\))

如:

var input = "SELECT * FROM blah WHERE ID IN ('<replaced>', '<replaced>', '<replaced>')";
var pattern = @"(\([^)]*?)('<replaced>'(?:, '<replaced>')*)([^)]*\))";
var output = Regex.Replace(input, pattern, "$1<replacedList>$3");

Console.WriteLine(output); // SELECT * FROM blah WHERE ID IN (<replacedList>)

关于c# - 正则表达式匹配所有特定的重复单词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17815146/

相关文章:

c# - 正则表达式列表中的多个字符串c#

c# - MonoTouch-XCode的组织器中更好的控制台输出

c# - UWP 焦点控制

c# - 从元数据中提取错误验证消息

javascript - 正则表达式 - 除 "e"之外的任何字母表

regex - Grep for <?php 空行后

c# - ValidateAntiForgeryToken 过滤器不起作用

javascript - 测试第三级斜杠的正则表达式?

php - 有趣的正则表达式

regex - 我的正则表达式匹配太多。我该如何让它停止?