Usuń podwójne cudzysłowy z ciągu znaków w .NET


100

Próbuję dopasować do jakiegoś niespójnie sformatowanego kodu HTML i muszę usunąć niektóre podwójne cudzysłowy.

Obecny:

<input type="hidden">

Cel:

<input type=hidden>

To jest złe, ponieważ nie uciekam przed tym poprawnie:

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

To jest złe, ponieważ nie ma pustego znaku (o ile wiem):

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

Co to jest kombinacja składni / znaków zmiany znaczenia do zastępowania podwójnych cudzysłowów pustym ciągiem znaków?

Odpowiedzi:


213

Myślę, że twoja pierwsza linia faktycznie zadziała, ale myślę, że potrzebujesz czterech cudzysłowów dla ciągu zawierającego jeden (przynajmniej w VB):

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

dla C # musiałbyś zmienić cudzysłów używając odwrotnego ukośnika:

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

1
ma to efekt uboczny, jeśli w ciągu znaków jest więcej osadzonych cudzysłowów
Aadith Ramia,

28

Nie widziałem, aby moje myśli się już powtórzyły, więc zasugeruję, abyś spojrzał string.Trimw dokumentacji Microsoft dla C #, aby dodać znak do przycięcia zamiast po prostu przycinać puste przestrzenie:

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

powinno skutkować atrybutem withOutQuotes "hello"zamiast""hello""


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

Musisz użyć \, aby zmienić znaczenie znaku podwójnego cudzysłowu w ciągu.


2
ma to efekt uboczny, jeśli w ciągu znaków jest więcej osadzonych cudzysłowów
Aadith Ramia,

14

Możesz użyć jednego z tych:

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

... ale naprawdę ciekawi mnie, dlaczego chcesz to zrobić? Uważam, że warto podawać wartości atrybutów?


1
Używam pakietu HTML Agility Pack, aby znaleźć określone łącze, a następnie muszę usunąć wartość tego łącza z tekstu HTML. Pakiet HTML Agility Pack cytuje wartości atrybutów, ale oryginalny HTML nie jest cytowany. (A wszystko to na jeden test.)
Nawet Mien

ma to efekt uboczny, jeśli w ciągu znaków jest więcej osadzonych cudzysłowów
Aadith Ramia,


5

c # "\"":, więcs.Replace("\"", "")

vb / vbs / vb.net: w ""ten sposóbs.Replace("""", "")


ma to efekt uboczny, jeśli w ciągu znaków jest więcej osadzonych cudzysłowów
Aadith Ramia,

3

Musisz uciec przed podwójnym cudzysłowem z ukośnikiem odwrotnym.

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

1
ma to efekt uboczny, jeśli w ciągu znaków jest więcej osadzonych cudzysłowów
Aadith Ramia,


1

To zadziałało dla mnie

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

Jeśli chcesz usunąć cudzysłowy tylko z końców łańcucha (nie ze środka), a istnieje szansa, że ​​na każdym końcu ciągu mogą znajdować się spacje (np. Podczas analizowania pliku w formacie CSV, w którym jest spacja po przecinki), musisz dwukrotnie wywołać funkcję Trim ... na przykład:

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

Dwa cudzysłowy umieszczone obok siebie będą działać jak zamierzony „znak wewnątrz ciągu”.


1
ma to efekt uboczny, jeśli w ciągu znaków jest więcej osadzonych cudzysłowów
Aadith Ramia,

0

jeśli chcesz usunąć pojedynczy znak, myślę, że łatwiej jest po prostu odczytać tablice i pominąć ten znak i zwrócić tablicę. Używam go podczas niestandardowego analizowania pliku json vcard. ponieważ jest to zły json z identyfikatorami tekstowymi w cudzysłowie.

Dodaj poniższą metodę do klasy zawierającej metody rozszerzające.

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

możesz następnie użyć tej metody rozszerzenia:

var text= myString.Remove('"');
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.