Удаление двойных кавычек из строки в .NET


100

Я пытаюсь сопоставить с каким-то непоследовательно отформатированным HTML-кодом, и мне нужно удалить некоторые двойные кавычки.

Текущий:

<input type="hidden">

Цель:

<input type=hidden>

Это неправильно, потому что я не ухожу должным образом:

s = s.Replace ("" "," ");

Это неправильно, потому что нет символа пустого символа (насколько мне известно):

s = s.Replace('"', '');

Что такое комбинация синтаксиса / escape-символа для замены двойных кавычек пустой строкой?

Ответы:


214

Я думаю, ваша первая строка действительно сработает, но я думаю, вам нужно четыре кавычки для строки, содержащей одну (по крайней мере, в VB):

s = s.Replace("""", "")

для C # вам придется экранировать кавычки с помощью обратной косой черты:

s = s.Replace("\"", "");

1
это имеет побочный эффект, если в строке больше встроенных кавычек
— Адит Рамиа

28

Я не видел, чтобы мои мысли повторялись, поэтому я предлагаю вам ознакомиться string.Trimс документацией Microsoft для C #, где вы можете добавить символ для обрезки вместо простого обрезания пустых пространств:

string withQuotes = "\"hellow\"";
string withOutQotes = withQuotes.Trim('"');

должен привести к тому, что withOutQuotes будет "hello"вместо""hello""


26
s = s.Replace("\"", "");

Вам нужно использовать \ для экранирования символа двойной кавычки в строке.


2
это имеет побочный эффект, если в строке больше встроенных кавычек
— Адит Рамиа

14

Вы можете использовать любой из них:

s = s.Replace(@"""","");
s = s.Replace("\"","");

... но мне действительно любопытно, зачем вам это нужно? Я думал, что это хорошая практика - цитировать значения атрибутов?


1
Я использую пакет HTML Agility Pack, чтобы найти определенную ссылку, а затем мне нужно удалить значение этой ссылки из текста HTML. HTML Agility Pack цитирует значения атрибутов, но исходный HTML не цитируется. (И все это для одного теста.)
— Even Mien,

это имеет побочный эффект, если в строке больше встроенных кавычек
— Адит Рамиа


5

c #:, "\""таким образомs.Replace("\"", "")

vb / vbs / vb.net: ""таким образомs.Replace("""", "")


это имеет побочный эффект, если в строке больше встроенных кавычек
— Адит Рамиа

3

Вы должны экранировать двойные кавычки с помощью обратной косой черты.

s = s.Replace("\"","");

1
это имеет побочный эффект, если в строке больше встроенных кавычек
— Адит Рамиа


1

Это сработало для меня

//Sentence has quotes
string nameSentence = "Take my name \"Wesley\" out of quotes";
//Get the index before the quotes`enter code here`
int begin = nameSentence.LastIndexOf("name") + "name".Length;
//Get the index after the quotes
int end = nameSentence.LastIndexOf("out");
//Get the part of the string with its quotes
string name = nameSentence.Substring(begin, end - begin);
//Remove its quotes
string newName = name.Replace("\"", "");
//Replace new name (without quotes) within original sentence
string updatedNameSentence = nameSentence.Replace(name, newName);

//Returns "Take my name Wesley out of quotes"
return updatedNameSentence;

1

Если вы хотите удалить кавычки только с концов строки (а не с середины), и есть вероятность, что на обоих концах строки могут быть пробелы (т. Е. Анализ файла формата CSV, где есть пробел после запятыми), то вам нужно дважды вызвать функцию Trim ... например:

string myStr = " \"sometext\"";     //(notice the leading space)
myStr = myStr.Trim('"');            //(would leave the first quote: "sometext)
myStr = myStr.Trim().Trim('"');     //(would get what you want: sometext)

0
s = s.Replace( """", "" )

Две кавычки рядом друг с другом будут функционировать как предполагаемый символ внутри строки.


1
это имеет побочный эффект, если в строке больше встроенных кавычек
— Адит Рамиа

0

если вы хотите удалить один символ, я думаю, проще просто прочитать массивы, пропустить этот символ и вернуть массив. Я использую его при пользовательском разборе json vcard. поскольку это плохой json с "цитируемыми" текстовыми идентификаторами.

Добавьте приведенный ниже метод в класс, содержащий ваши методы расширения.

  public static string Remove(this string text, char character)
  {
      var sb = new StringBuilder();
      foreach (char c in text)
      {
         if (c != character)
             sb.Append(c);
      }
      return sb.ToString();
  }

затем вы можете использовать этот метод расширения:

var text= myString.Remove('"');
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.