如何转义 '\'
How to Escape '\'
在执行我的 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
我没主意了!很高兴听到任何建议。我认为如果我能逃脱这个角色,问题就会得到解决。到目前为止我做不到。如果我得到答案,我会 post 它。
这 --> @"your\string\here".Contains("\");
--> returns 正确 -- 它没有
我的正确答案是:
string [] temp = @"aaa\taaa\taaa".Split('\t');
谢谢大家! :)
转义转义序列使用它两次:
"\"
或者在字符串前面使用@
verbatim-string-literal。它将强制编译器在没有任何转义序列的情况下按字面解释字符串。请参阅 documentation
@"\"
这意味着你想使用split你可以使用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('\');
Contains
和 Replace
的工作方式类似:
bool cont = @"your\string\here".Contains(@"\");
string repl = @"your\string\here".Replace(@"\", " ");
编辑:
更新后很明显您的字符串是制表符分隔的:
您需要将其拆分 \t
个制表符!
string [] temp = @"aaa\taaa\taaa".Split('\t');
请阅读我发布的第一个 link。文档说:
A character that follows a backslash character () in a regular-string-literal-character must be one of the following characters: ', ", \, 0, a, b, f, n, r, t, u, U, x, v. Otherwise, a compile-time error occurs.
要在 C# 中使用反斜杠字符,您需要使用另一个反斜杠对其进行转义 ('\'
)。此外,String.Split
方法需要一个字符数组(不是单个字符串或字符)。
因此您的代码应如下所示:
value.Split(new char[] { '\' })
请参阅此 dotNetFiddle 以获取在线演示。
在执行我的 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
我没主意了!很高兴听到任何建议。我认为如果我能逃脱这个角色,问题就会得到解决。到目前为止我做不到。如果我得到答案,我会 post 它。
这 --> @"your\string\here".Contains("\");
--> returns 正确 -- 它没有
我的正确答案是:
string [] temp = @"aaa\taaa\taaa".Split('\t');
谢谢大家! :)
转义转义序列使用它两次:
"\"
或者在字符串前面使用@
verbatim-string-literal。它将强制编译器在没有任何转义序列的情况下按字面解释字符串。请参阅 documentation
@"\"
这意味着你想使用split你可以使用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('\');
Contains
和 Replace
的工作方式类似:
bool cont = @"your\string\here".Contains(@"\");
string repl = @"your\string\here".Replace(@"\", " ");
编辑:
更新后很明显您的字符串是制表符分隔的:
您需要将其拆分 \t
个制表符!
string [] temp = @"aaa\taaa\taaa".Split('\t');
请阅读我发布的第一个 link。文档说:
A character that follows a backslash character () in a regular-string-literal-character must be one of the following characters: ', ", \, 0, a, b, f, n, r, t, u, U, x, v. Otherwise, a compile-time error occurs.
要在 C# 中使用反斜杠字符,您需要使用另一个反斜杠对其进行转义 ('\'
)。此外,String.Split
方法需要一个字符数组(不是单个字符串或字符)。
因此您的代码应如下所示:
value.Split(new char[] { '\' })
请参阅此 dotNetFiddle 以获取在线演示。