Regex匹配所有特定的重复单词
本文关键字:单词 Regex | 更新日期: 2023-09-27 18:24:36
我有一个字符串,大概是这样的:
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>)