考虑以下几点:C#Regex.Replace - 搜索替换字符串匹配以及
string input = "xSxSx";
var result = Regex.Replace(input, "xSx", "xTx");
// result == "xTxSx"
它看起来像替换字符串不用于进一步的匹配,这就是为什么我们没有得到预期的“xTxTx”。
如何解决?是否有某种特殊符号可以让发动机在第一次替换时使用该字符串进行第二次匹配?
考虑以下几点:C#Regex.Replace - 搜索替换字符串匹配以及
string input = "xSxSx";
var result = Regex.Replace(input, "xSx", "xTx");
// result == "xTxSx"
它看起来像替换字符串不用于进一步的匹配,这就是为什么我们没有得到预期的“xTxTx”。
如何解决?是否有某种特殊符号可以让发动机在第一次替换时使用该字符串进行第二次匹配?
这是因为,一旦一个字符匹配,它将不会再次匹配。所以,第二次匹配的字符串是Sx
而不是xSx
。
您需要使用查找变通这里:
Regex.Replace(input, "(?<=x)S(?=x)", "T");
这将替换S
这既是之前和成功通过x
用T
。由于的浏览环节是0长度断言,他们不会消耗x
。
只需使用一个循环来处理更复杂的任何事情,而无法简化为[前/后]的外观。
string test = "xSxSx";
string result = string.Empty;
while(true) {
result = Regex.Replace(test, "xSx", "xTx");
if(result != test)
test = result;
else
break;
}
您可能不希望这是默认行为,因为'Regex.Replace(input,“a”,“aa”)'会产生无限循环。 –
是的,你是对的。 –