如何逃脱'\'

时间:2017-09-27 12:06:23

标签: c# string backslash

在执行我的C#代码以使用ADO读取.CSV时,我有下一个问题: 在读取我的行时,我得到一个包含在字符串中的值并用“\”拆分。像“hi \ goodMorning \ ByeBye”之类的东西。

这是我的代码:

// Crear el objeto de conexión utilizando la cadena de conexión anterior. 
using (OleDbConnection objConn = new OleDbConnection(sConnectionString))
{
    // Abrir la conexión con la base de datos. 
    objConn.Open();
    // El código utiliza un comando SQL SELECT para mostrar los datos de la hoja de cálculo.
    string sql = "SELECT * FROM " + fileName;
    // Crear un nuevo OleDbCommand para devolver los datos de la hoja de cálculo. 
    using (OleDbCommand objCmdSelect = new OleDbCommand(sql, objConn))
    {
        // Crear un nuevo OleDbDataAdapter que se usa para generar un DataSet // basado en la instrucción SQL SELECT anterior. 
        // Pasar el comando Select al adaptador. 
        //OleDbDataAdapter objAdapter1 = new OleDbDataAdapter(objCmdSelect);
        OleDbDataReader reader = objCmdSelect.ExecuteReader();

        while (reader.Read())
        {
            string value= @reader[0].ToString();

到目前为止,我一直在尝试:

A -->  string value = reader[0].ToString();

B -->  value .Split(Convert.ToChar(92)); //Using ASCII

C --> System.Text.RegularExpressions.Regex.Escape("\\")

D --> value.Contains((char)92); //---> returns false

E -->  value.Contains("\\\"); //---> returns false

F --> .Replace doesn't work either

我没有想法!很高兴听到任何建议。我认为如果我能逃脱这个角色,这个问题就会得到解决。到目前为止我无法做到。如果我得到答案,我会发布。

这 - > @"your\string\here".Contains("\\"); - >返回TRUE - 它不是

enter image description here

我的案例中的正确答案是:

string []  temp = @"aaa\taaa\taaa".Split('\t');

谢谢大家! :)

2 个答案:

答案 0 :(得分:4)

要转义转义序列,请使用它两次:

"\\"

或在字符串前面使用@ verbatim-string-literal 。它将强制编译器在没有任何转义序列的情况下按字面解释字符串。请参阅documentation

@"\"

这意味着您要使用拆分,可以使用this overload

string []  temp = @"your\string\here".Split(new string [] {@"\"}, StringSplitOptions.None);

overload that accepts a char as parameter

string []  temp = @"your\string\here".Split('\\');

ContainsReplace的工作方式类似:

bool cont = @"your\string\here".Contains(@"\");

string repl = @"your\string\here".Replace(@"\", " ");

编辑:

更新后,很明显你的字符串是制表符分隔的:

enter image description here

您需要按\t标签对其进行拆分!

string []  temp = @"aaa\taaa\taaa".Split('\t');

请阅读我发布的第一个链接。文档说:

  

在常规字符串 - 文字字符中跟随反斜杠字符()的字符必须是以下字符之一:',",\,0,a,b,f,n ,r,t,u,U,x,v。否则,发生编译时错误。

答案 1 :(得分:2)

要在C#中使用反斜杠字符,您需要使用另一个反斜杠('\\')对其进行转义。此外,String.Split方法需要一个字符数组(不是单个字符串或字符)。

所以你的代码应该是这样的:

value.Split(new char[] { '\\' })

有关在线演示,请参阅此dotNetFiddle