我有一个像这样的字符串:
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/