Supprimez les guillemets doubles d'une chaîne dans .NET

99

J'essaie de faire correspondre du HTML au format incohérent et j'ai besoin de supprimer quelques guillemets.

Actuel:

<input type="hidden">

Le but:

<input type=hidden>

C'est faux car je n'y échappe pas correctement:

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

C'est faux car il n'y a pas de caractère vierge (à ma connaissance):

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

Qu'est-ce qu'une combinaison syntaxe / caractère d'échappement pour remplacer les guillemets doubles par une chaîne vide?

Même Mien
la source

Réponses:

212

Je pense que votre première ligne fonctionnerait réellement mais je pense que vous avez besoin de quatre guillemets pour une chaîne en contenant un seul (au moins en VB):

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

pour C #, vous devez échapper le guillemet en utilisant une barre oblique inverse:

s = s.Replace("\"", "");
Joey
la source
1
cela a un effet secondaire s'il y a plus de guillemets incorporés dans la chaîne
Aadith Ramia
27

Je n'ai pas déjà vu mes pensées se répéter, donc je vous suggère de regarder string.Trimdans la documentation Microsoft pour C #, vous pouvez ajouter un caractère à couper au lieu de simplement couper les espaces vides:

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

devrait aboutir à ce que withOutQuotes soit "hello"au lieu de""hello""

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

Vous devez utiliser \ pour échapper le caractère guillemet double dans une chaîne.

David
la source
2
cela a un effet secondaire s'il y a plus de guillemets incorporés dans la chaîne
Aadith Ramia
14

Vous pouvez utiliser l'un de ces éléments:

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

... mais je suis curieux de savoir pourquoi vous voudriez faire ça? J'ai pensé que c'était une bonne pratique de garder les valeurs d'attribut entre guillemets?

Fredrik Mörk
la source
1
J'utilise le pack d'agilité HTML pour trouver un certain lien, puis je dois supprimer une valeur de ce lien du texte HTML. Le HTML Agility Pack cite les valeurs d'attribut, mais le HTML d'origine n'est pas cité. (Et tout cela pour un test.)
Even Mien
cela a un effet secondaire s'il y a plus de guillemets incorporés dans la chaîne
Aadith Ramia
6
s = s.Replace("\"",string.Empty);
Steve Gilham
la source
1
cela a un effet secondaire s'il y a plus de guillemets incorporés dans la chaîne
Aadith Ramia
5

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

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

svinto
la source
cela a un effet secondaire s'il y a plus de guillemets incorporés dans la chaîne
Aadith Ramia
3

Vous devez échapper aux guillemets doubles avec une barre oblique inverse.

s = s.Replace("\"","");
Jake Pearson
la source
1
cela a un effet secondaire s'il y a plus de guillemets incorporés dans la chaîne
Aadith Ramia
1

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

gHeidenreich
la source
cela a un effet secondaire s'il y a plus de guillemets incorporés dans la chaîne
Aadith Ramia
1

Cela a fonctionné pour moi

//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
la source
1

Si vous souhaitez supprimer uniquement les guillemets des extrémités de la chaîne (pas du milieu), et qu'il y a un risque qu'il puisse y avoir des espaces à chaque extrémité de la chaîne (c'est-à-dire l'analyse d'un fichier au format CSV où il y a un espace après le virgules), vous devez alors appeler la fonction Trim deux fois ... par exemple:

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

Deux guillemets l'un à côté de l'autre fonctionneront comme le caractère "voulu" à l'intérieur d'une chaîne.

Mike
la source
1
cela a un effet secondaire s'il y a plus de guillemets incorporés dans la chaîne
Aadith Ramia
0

si vous souhaitez supprimer un seul caractère, je suppose qu'il est plus facile de simplement lire les tableaux et de sauter ce caractère et de renvoyer le tableau. Je l'utilise lors de l'analyse personnalisée du json de vcard. car c'est un mauvais json avec des identificateurs de texte "entre guillemets".

Ajoutez la méthode ci-dessous à une classe contenant vos méthodes d'extension.

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

vous pouvez ensuite utiliser cette méthode d'extension:

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