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#来解析它,但我不会标记它,因为这应该是通用正则表达式。

Regex匹配所有特定的重复单词

您可以使用以下模式:

(?<='([^)]*)'<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>)