Видаліть подвійні лапки з рядка в .NET


99

Я намагаюся збігатися з деяким непослідовно відформатованим HTML, і мені потрібно вилучити подвійні лапки.

Поточний:

<input type="hidden">

Мета:

<input type=hidden>

Це неправильно, оскільки я не уникаю цього належним чином:

s = s.Замінити ("" "," ");

Це неправильно, оскільки немає символу порожнього символу (наскільки мені відомо):

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

Що таке комбінація синтаксису / екранованого символу для заміни подвійних лапок порожнім рядком?

Відповіді:


212

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

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

для C # вам доведеться уникнути лапки, використовуючи зворотну скісну риску:

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

1
це має побічний ефект, якщо в рядку є більше вбудованих лапок
Aadith Ramia

27

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

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

має призвести до того, що "hello"замість""hello""


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

Вам потрібно використовувати \, щоб уникнути символу подвійних лапок у рядку.


2
це має побічний ефект, якщо в рядку є більше вбудованих лапок
Aadith Ramia

14

Ви можете використовувати будь-який із цих варіантів:

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

... але мені цікаво, чому ви хочете це зробити? Я вважав, що це хороша практика - зберігати вказані значення атрибутів?


1
Я використовую HTML Agility Pack, щоб знайти певне посилання, а потім мені потрібно видалити значення в цьому посиланні з тексту HTML. Пакет спритності HTML цитує значення атрибутів, але оригінальний HTML не цитується. (І все це за один тест.)
Навіть Mien

це має побічний ефект, якщо в рядку є більше вбудованих лапок
Aadith Ramia


5

c #:, "\""таким чиномs.Replace("\"", "")

vb / vbs / vb.net: ""таким чиномs.Replace("""", "")


це має побічний ефект, якщо в рядку є більше вбудованих лапок
Aadith Ramia

3

Вам потрібно уникнути подвійної лапки за допомогою зворотної риски.

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

1
це має побічний ефект, якщо в рядку є більше вбудованих лапок
Aadith Ramia


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
це має побічний ефект, якщо в рядку є більше вбудованих лапок
Aadith Ramia

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.