4

我有这个文字

'Random Text', 'a\nb\\c\'d\\', 'ok'

我想让它变成

'Random Text', 'a\nb\c''d\', 'ok'

问题正在逃避。\我现在只'用逃避,而不是用 逃避''。这是针对第 3 方程序的,因此我无法更改它,因此需要将一种转义方法更改为另一种。

问题是\\'。如果我进行字符串替换,它将变为\''而不是\'. 也不\n是换行符,而是\n不应修改的实际文本。我尝试使用正则表达式,但我想不出一种方法来表示 if 'replace with ''else if \\replace with \。显然,分两步执行此操作会产生问题。

如何正确替换此字符串?

4

2 回答 2

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 == @"\\" ? @"\" : @"''");
于 2013-08-07T18:14:07.293 回答
3

似乎voithos对这个问题的解释是正确的。另一种方法是使用 RegEx 一次查找所有标记并替换ReguarExpression.Replace

初始点:

var matches = new Regex(@"\\\\'|\\'|'");
Console.Write(matches.Replace(@"'a b\nc d\\e\'f\\'", 
   match =>"["+match + "]"));
于 2013-08-07T18:27:28.140 回答