Entfernen Sie doppelte Anführungszeichen aus einer Zeichenfolge in .NET

97

Ich versuche, mit inkonsistent formatiertem HTML übereinzustimmen, und muss einige doppelte Anführungszeichen entfernen.

Aktuell:

<input type="hidden">

Das Ziel:

<input type=hidden>

Das ist falsch, weil ich es nicht richtig entkomme:

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

Dies ist falsch, da es meines Wissens kein leeres Zeichen gibt:

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

Was ist eine Kombination aus Syntax und Escapezeichen, um doppelte Anführungszeichen durch eine leere Zeichenfolge zu ersetzen?

Sogar Mien
quelle

Antworten:

210

Ich denke, Ihre erste Zeile würde tatsächlich funktionieren, aber ich denke, Sie benötigen vier Anführungszeichen für eine Zeichenfolge, die eine einzelne enthält (mindestens in VB):

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

Für C # müssten Sie das Anführungszeichen mit einem Backslash umgehen:

s = s.Replace("\"", "");
Joey
quelle
1
Dies hat einen Nebeneffekt, wenn es mehr eingebettete Anführungszeichen in der Zeichenfolge gibt
Aadith Ramia
27

Ich habe meine Gedanken noch nicht wiederholt gesehen, daher schlage ich vor, dass Sie string.Trimin der Microsoft-Dokumentation zu C # ein zu trimmendes Zeichen hinzufügen, anstatt einfach Leerzeichen zu kürzen:

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

sollte dazu führen, dass withOutQuotes "hello"anstelle von ist""hello""

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

Sie müssen das \ verwenden, um das doppelte Anführungszeichen in einer Zeichenfolge zu umgehen.

David
quelle
2
Dies hat einen Nebeneffekt, wenn es mehr eingebettete Anführungszeichen in der Zeichenfolge gibt
Aadith Ramia
14

Sie können eine der folgenden Methoden verwenden:

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

... aber ich werde neugierig, warum du das machen willst? Ich dachte, es wäre eine gute Praxis, Attributwerte in Anführungszeichen zu setzen?

Fredrik Mörk
quelle
1
Ich verwende das HTML Agility Pack, um einen bestimmten Link zu finden, und muss dann einen Wert in diesem Link aus dem HTML-Text entfernen. Das HTML Agility Pack zitiert die Attributwerte, aber das ursprüngliche HTML wird nicht zitiert. (Und das alles für einen Test.)
Sogar Mien
Dies hat einen Nebeneffekt, wenn es mehr eingebettete Anführungszeichen in der Zeichenfolge gibt
Aadith Ramia
6
s = s.Replace("\"",string.Empty);
Steve Gilham
quelle
1
Dies hat einen Nebeneffekt, wenn es mehr eingebettete Anführungszeichen in der Zeichenfolge gibt
Aadith Ramia
5

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

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

svinto
quelle
Dies hat einen Nebeneffekt, wenn es mehr eingebettete Anführungszeichen in der Zeichenfolge gibt
Aadith Ramia
3

Sie müssen dem doppelten Anführungszeichen mit einem Backslash entkommen.

s = s.Replace("\"","");
Jake Pearson
quelle
1
Dies hat einen Nebeneffekt, wenn es mehr eingebettete Anführungszeichen in der Zeichenfolge gibt
Aadith Ramia
1

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

gHeidenreich
quelle
Dies hat einen Nebeneffekt, wenn es mehr eingebettete Anführungszeichen in der Zeichenfolge gibt
Aadith Ramia
1

Das hat bei mir funktioniert

//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;
user3519062
quelle
1

Wenn Sie nur die Anführungszeichen von den Enden der Zeichenfolge (nicht von der Mitte) entfernen möchten und die Möglichkeit besteht, dass an beiden Enden der Zeichenfolge Leerzeichen vorhanden sind (dh beim Analysieren einer Datei im CSV-Format, in der nach dem Leerzeichen ein Leerzeichen steht Kommas), dann müssen Sie die Trimmfunktion zweimal aufrufen ... zum Beispiel:

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)
TJC
quelle
0
s = s.Replace( """", "" )

Zwei Anführungszeichen nebeneinander fungieren in einer Zeichenfolge als beabsichtigtes "Zeichen".

Mike
quelle
1
Dies hat einen Nebeneffekt, wenn es mehr eingebettete Anführungszeichen in der Zeichenfolge gibt
Aadith Ramia
0

Wenn Sie ein einzelnes Zeichen entfernen möchten, ist es wahrscheinlich einfacher, die Arrays zu lesen, das Zeichen zu überspringen und das Array zurückzugeben. Ich benutze es beim benutzerdefinierten Parsen von Json von vcard. wie es schlecht ist json mit "zitierten" Textkennungen.

Fügen Sie die folgende Methode zu einer Klasse hinzu, die Ihre Erweiterungsmethoden enthält.

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

Sie können dann diese Erweiterungsmethode verwenden:

var text= myString.Remove('"');
Walter Vehoeven
quelle