我想在字符串中将"
的{{1}}替换为\"
,除非此"
前面有\
例如,字符串hello "World\"
将变为hello \"World\"
不使用正则表达式可以吗? 但是,如果我必须使用正则表达式,我可以使用什么样的?
感谢您的帮助, 的问候,
答案 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