строка. Замена не работает на кавычку

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

Я хочу результат, что, если какая-либо строка имеет кавычку, это изменяет его в кавычку наклонной черты, например. John's -> John\'s

но вышеупомянутая функция замены не хорошо работает. это заканчивается как John\\'s

но если мы изменяем код на

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

это дает Результат как John's

действительно изменяет его так или иначе.

6
задан Azhar 1 October 2012 в 08:31
поделиться

7 ответов

Поскольку обратная косая черта - это escape-символ, вам нужно указать ему, что вы хотите рассматривать его как буквальную строку. Вы делаете это, добавляя @ к строке:

((string)dt.Rows[i][1]).Replace("'", @"\'") 
16
ответ дан 8 December 2019 в 02:45
поделиться

Попробуйте использовать двойную обратную косую черту.

\\

Всего одна обратная косая черта - это побег; два - это обратная косая черта.

9
ответ дан 8 December 2019 в 02:45
поделиться

Используйте "\\\'" или @"\'" для замены строки. Обратная косая черта является символом экранирования в строковых литералах C#. См. объяснение строковых литералов в C#: \' в строковом литерале приводит к одной кавычке. Причина, по которой существует эта последовательность, заключается в том, что одинарные кавычки потребовали бы экранирования, если бы вы использовали char литерал ('\'').

Символ @ указывает на то, что вы используете синтаксис дословной строки, который позволяет использовать многострочные строки и устраняет необходимость экранирования символов, кроме двойной кавычки, которую вы должны экранировать двойными двойными кавычками (стиль Visual Basic).

4
ответ дан 8 December 2019 в 02:45
поделиться

Не могли бы вы уточнить? Вы хотите сказать, что

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

не заменяет ' на \' ?

Потому что я только что попробовал, и он отлично работает. Т.е. это

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

            Console.WriteLine(two);

Выводит мля \ '

3
ответ дан 8 December 2019 в 02:45
поделиться

Replace("'", "\'") use double slash

1
ответ дан 8 December 2019 в 02:45
поделиться

Вы можете использовать что-то вроде этого:

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));
 }

Результаты:

Джона Стива

Джона Стива

0
ответ дан 8 December 2019 в 02:45
поделиться

Если вы хотите подготовить SQL-запрос, я думаю, что лучший способ - заменить одно слово «for». Например, если вы хотите выполнить поиск Джона О'Коннора, это сработает (по крайней мере, в SQL Server, Access, Oracle, ...).

выберите ... из пользователей, у которых username = 'Jonh O''Connor'

0
ответ дан 8 December 2019 в 02:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: