C#替换字符串,除非前面有另一个字符串

时间:2014-01-16 21:44:53

标签: c# regex string replace

我想在字符串中将"的{​​{1}}替换为\",除非此"前面有\ 例如,字符串hello "World\"将变为hello \"World\"

不使用正则表达式可以吗? 但是,如果我必须使用正则表达式,我可以使用什么样的?

感谢您的帮助, 的问候,

5 个答案:

答案 0 :(得分:6)

你可以使用lookbehind:

var output = Regex.Replace(input, @"(?<!\\)""", @"\""")

或者您可以将前置字符设为可选,例如:

var output = Regex.Replace(input, @"\\?""", @"\""")

这可行,因为"已替换为\"(这是您想要的),\"已替换为\",因此无法更改。

答案 1 :(得分:3)

这方面的正则表达式是:

(?<!\\)"

答案 2 :(得分:0)

如果没有正则表达式,应该这样做:

yourStringVar.Replace("""","\\""").Replace("\\\\""","\\""");

答案 3 :(得分:0)

可以不使用正则表达式:

  str = str.Replace(" \"", "\\\"");

答案 4 :(得分:0)

由于您已经明确询问是否可以使用正则表达式,因此使用纯String.Replace方法并不是那么简单和不可能。您可以使用循环和StringBuilder

StringBuilder builder = new StringBuilder(); 
builder.Append(text[0] == '"' ? "\\\"" : text.Substring(0, 1));
for (int i = 1; i < text.Length; i++)
{
    Char next = text[i];
    Char last = text[i - 1];
    if (next == '"' && last != '\\')
        builder.Append("\\\"");
    else
       builder.Append(next);
}
string result = builder.ToString();

编辑:这是一个演示(难以创建该字符串文字):http://ideone.com/Xmeh1w