string.Replace对引用不起作用

时间:2010-06-07 13:49:09

标签: c# asp.net .net c#-3.0

((string)dt.Rows[i][1]).Replace("'", "\\'")

我想要的结果是,如果任何字符串有引号,则将其更改为斜杠引号,例如John's - > John\'s

但上面的替换功能不能正常工作。 结果如John\\'s

但如果我们将代码更改为

((string)dt.Rows[i][1]).Replace("'", "\'")

它给出的结果如John's

无论如何都会改变它。

7 个答案:

答案 0 :(得分:16)

因为反斜杠是转义字符,所以你需要告诉它你要把它当作文字字符串来对待它。你可以通过在字符串前加上@来实现这个目的:

((string)dt.Rows[i][1]).Replace("'", @"\'") 

答案 1 :(得分:9)

尝试双反斜杠。

\\

只有一个反斜杠就是逃避;两个是实际的反斜杠。

答案 2 :(得分:4)

使用"\\'"@"\'"替换字符串。反斜杠是C#字符串文字中的转义字符。请参阅C#中string literals的解释:字符串文字中的\'只会导致单引号。 这个转义序列存在的原因是因为如果使用char文字('\''),单引号将需要转义。

@表示您正在使用逐字字符串语法,它允许使用多行字符串并且除了双引号之外不需要转义字符,您可以使用双引号转义(Visual Basic样式)。

答案 3 :(得分:3)

你能澄清一下吗?你是说那个

((string)dt.Rows[i][1]).Replace("'", "\\'") 

'替换\'吗?

因为我刚试过它并且工作正常。即此

            string one = "blah'";
            string two = one.Replace("'", "\\'");

            Console.WriteLine(two);

打印blah\'

答案 4 :(得分:1)

替换(“'”,“\'”)使用双斜杠

答案 5 :(得分:0)

您可以使用以下内容:

private static string replace(String input)
{
   return Regex.Replace(input, "('|\")", "\\'");
}

static void Main(string[] args)
{
   String value1 = "John Steve's";
   String value2 = "John Steve\"s";

   Console.WriteLine(replace(value1));
   Console.WriteLine(replace(value2));
 }

结果:

  

约翰史蒂夫的

     

约翰史蒂夫的

答案 6 :(得分:0)

如果你想准备一个SQL查询,我认为最好的方法是替换一个'for''。例如,如果您想搜索John O'Connor,这将起作用(至少在SQL Server,Access,Oracle,...)。

从username ='Jonh O''Connor'

的用户中选择....