Elimina le virgolette doppie da una stringa in .NET


99

Sto cercando di trovare una corrispondenza su un HTML formattato in modo incoerente e ho bisogno di rimuovere alcune virgolette doppie.

Attuale:

<input type="hidden">

L'obiettivo. il gol:

<input type=hidden>

Questo è sbagliato perché non lo sto scappando correttamente:

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

Questo è sbagliato perché non ci sono caratteri vuoti (per quanto ne so):

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

Qual è la combinazione di sintassi / caratteri di escape per sostituire le virgolette doppie con una stringa vuota?

Risposte:


212

Penso che la tua prima riga funzionerebbe effettivamente, ma penso che tu abbia bisogno di quattro virgolette per una stringa che ne contiene una sola (almeno in VB):

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

per C # dovresti sfuggire alle virgolette usando una barra rovesciata:

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

1
questo ha un effetto collaterale se ci sono più virgolette incorporate nella stringa
— Aadith Ramia

27

Non ho già visto i miei pensieri ripetuti, quindi ti suggerisco di guardare string.Trimnella documentazione Microsoft per C # puoi aggiungere un carattere da tagliare invece di tagliare semplicemente gli spazi vuoti:

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

dovrebbe comportare che withOutQuotes sia "hello"invece di""hello""


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

È necessario utilizzare \ per eseguire l'escape del carattere virgolette doppie in una stringa.


2
questo ha un effetto collaterale se ci sono più virgolette incorporate nella stringa
— Aadith Ramia

14

Puoi usare uno di questi:

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

... ma mi incuriosisce il motivo per cui vorresti farlo? Ho pensato che fosse una buona pratica mantenere i valori degli attributi citati?


1
Sto utilizzando HTML Agility Pack per trovare un determinato collegamento, quindi devo rimuovere un valore in quel collegamento dal testo HTML. L'HTML Agility Pack cita i valori degli attributi, ma l'HTML originale non viene citato. (E tutto questo per una prova.)
— Anche Mien

questo ha un effetto collaterale se ci sono più virgolette incorporate nella stringa
— Aadith Ramia

6
s = s.Replace("\"",string.Empty);

1
questo ha un effetto collaterale se ci sono più virgolette incorporate nella stringa
— Aadith Ramia

5

c #:, "\""quindis.Replace("\"", "")

vb / vbs / vb.net: ""quindis.Replace("""", "")


questo ha un effetto collaterale se ci sono più virgolette incorporate nella stringa
— Aadith Ramia

3

Devi evitare le virgolette doppie con una barra rovesciata.

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

1
questo ha un effetto collaterale se ci sono più virgolette incorporate nella stringa
— Aadith Ramia


1

Questo ha funzionato per me

//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

Se vuoi solo rimuovere le virgolette dalle estremità della stringa (non dal centro), e c'è la possibilità che ci possano essere spazi alle due estremità della stringa (cioè analizzare un file in formato CSV dove c'è uno spazio dopo il virgole), quindi è necessario chiamare la funzione Trim due volte ... ad esempio:

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( """", "" )

Due virgolette una accanto all'altra funzioneranno come il carattere "previsto all'interno di una stringa.


1
questo ha un effetto collaterale se ci sono più virgolette incorporate nella stringa
— Aadith Ramia

0

se desideri rimuovere un singolo carattere, immagino che sia più semplice leggere semplicemente gli array e saltare quel carattere e restituire l'array. Lo uso durante l'analisi personalizzata del json di vcard. in quanto è cattivo json con identificatori di testo "quotati".

Aggiungi il metodo seguente a una classe contenente i tuoi metodi di estensione.

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

puoi quindi utilizzare questo metodo di estensione:

var text= myString.Remove('"');
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.