比如有一个字符串为
这里我整体字符串不加引号。
asdsadsad asdsadsad "abc" abc " abc.. " abc[123]
这里只替换第二和第四个abc
同时 该字符串内还可能还有转义字符 比如\"
\"abc\" 那么这里的abc还是要替换的。
有没有好的办法?
------解决思路----------------------
#1 的为什么不行?
string txt = "asdsadsad asdsadsad \"abc\" abc \" abc.. \" abc[123]";
Regex reg = new Regex("abc");
int now = 0;
int[] arr = { 1, 3 };
var txt1 = reg.Replace(txt, m =>
{
string v = m.Value;
if (arr.Contains(now))
{
v = "ABC";
}
now++;
return v;
});
Console.WriteLine(txt);
Console.WriteLine(txt1);

------解决思路----------------------
可以优先将字符串也匹配出来,只是替换时内容不变
string txt = @"asdsadsad asdsadsad ""abc"" abc "" abc.. "" abc[123]\""abc\""";
Regex reg = new Regex( @"(?<!\\)""(?:[^""]
------解决思路----------------------
\\"")*""
------解决思路----------------------
\\""abc\\""
------解决思路----------------------
abc");
string result = reg.Replace(txt, match=>{
if(match.Value[0] == '"' && match.Value[match.Value.Length - 1] == '"')
{
return match.Value;
}
else
{
return "{abc}"; // ... 替换
}
});
Console.WriteLine(txt);
Console.WriteLine(result);
// txt:
// asdsadsad asdsadsad "abc" abc " abc.. " abc[123]\"abc\"
// result:
// asdsadsad asdsadsad "abc" {abc} " abc.. " {abc}[123]{abc}
------解决思路----------------------
string txt = @"asdsadsad asdsadsad ""abc"" abc "" abc.. "" abc[123]";
Regex reg = new Regex(@"(?<p>(?<k>""?)[^""]*)abc(?<n>[^""]*?\k<k>)");
txt = reg.Replace(txt, m =>
{
Console.WriteLine(m.Value);
string v = m.Value;
if (!m.Groups["p"].Value.Contains("\""))
{
v = string.Format("{0}{1}{2}", m.Groups["p"].Value, "_ABC_", m.Groups["n"].Value);
}
return v;
});
Console.WriteLine(txt);