当前位置: 代码迷 >> C# >> C# 里面如何用正则表达式 替换在非字符串内的匹配字符串
  详细解决方案

C# 里面如何用正则表达式 替换在非字符串内的匹配字符串

热度:338   发布时间:2016-04-28 08:36:36.0
C# 里面怎么用正则表达式 替换在非字符串内的匹配字符串
比如有一个字符串为
这里我整体字符串不加引号。

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);