我有这个文字
'Random Text', 'a\nb\\c\'d\\', 'ok'
我希望它成为
'Random Text', 'a\nb\c''d\', 'ok'
这个问题正在逃避。我没有使用\
进行转义,而是仅使用'
转义''
。这是针对第三方程序,所以我无法更改它,因此需要将一个转义方法更改为另一个。
问题是\\'
。如果我进行字符串替换,它将变为\''
而不是\'
。此外,\n
不是换行符,而是不应修改的实际文本\n
。我尝试使用正则表达式,但如果'
替换为''
,\\
替换为\
,我无法想办法说出{{1}}。显然,分两步执行此操作会产生问题。
如何正确替换此字符串?
答案 0 :(得分:6)
如果我正确理解了您的问题,则问题在于将\\
替换为\
,如果它发生在'
之前,则会导致另一个替换。一种技术是首先将它替换为中间字符串,确保在其他任何地方都不会出现,然后在完成后将其替换回来。
var str = @"'Random Text', 'a\nb\\c\'d\\', 'ok'";
str.Replace(@"\\", "NON_OCCURRING_TEMP")
.Replace(@"\'", "''")
.Replace("NON_OCCURRING_TEMP", @"\");
正如@AlexeiLevenkov指出的那样,您也可以使用Regex.Replace
同时进行两种修改。
Regex.Replace(str, @"(\\\\)|(\\')",
match => match.Value == @"\\" ? @"\" : @"''");
答案 1 :(得分:3)
似乎voithos对这个问题的解释是正确的。另一种方法是使用RegEx一次查找所有令牌并替换ReguarExpression.Replace
起点:
var matches = new Regex(@"\\\\'|\\'|'");
Console.Write(matches.Replace(@"'a b\nc d\\e\'f\\'",
match =>"["+match + "]"));