鉴于以下内容:
string input = "xSxSx";
var result = Regex.Replace(input, "xSx", "xTx");
// result == "xTxSx"
看起来替换字符串不用于进一步匹配,这就是为什么我们没有得到预期的“xTxTx”。
如何解决?是否有某种特殊的符号告诉引擎使用已经存在第一个替换的字符串找到第二个匹配?
答案 0 :(得分:5)
那是因为,一旦匹配一个角色,它就不会再次匹配。所以,第二次匹配的字符串是Sx
而不是xSx
。
您需要在此处使用 look-arounds :
Regex.Replace(input, "(?<=x)S(?=x)", "T");
这将替换S
x
,{{1>} <{1>}。由于 look-arounds 是 0-length 断言,因此它们不会消耗T
。
答案 1 :(得分:0)
只需使用一个循环来处理任何更复杂的循环,你可以简化为[前/后]的外观。
string test = "xSxSx";
string result = string.Empty;
while(true) {
result = Regex.Replace(test, "xSx", "xTx");
if(result != test)
test = result;
else
break;
}