NET'te bir dizeden çift tırnak işaretlerini kaldırın


101

Tutarsız bir şekilde biçimlendirilmiş bazı HTML'lerle eşleşmeye çalışıyorum ve bazı çift tırnak işaretlerini çıkarmam gerekiyor.

Akım:

<input type="hidden">

Amaç:

<input type=hidden>

Bu yanlış çünkü doğru şekilde kaçmıyorum:

s = s. Değiştir ("" "," ");

Bu yanlış çünkü boş karakter yok (bildiğim kadarıyla):

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

Çift tırnakları boş bir dizeyle değiştirmek için sözdizimi / kaçış karakter kombinasyonu nedir?

Yanıtlar:


215

İlk satırınızın gerçekten işe yarayacağını düşünüyorum, ancak tek bir satır içeren bir dize için dört tırnak işaretine ihtiyacınız olduğunu düşünüyorum (en azından VB'de):

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

C # için ters eğik çizgi kullanarak tırnak işaretinden çıkmanız gerekir:

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

1
Dize içinde daha fazla katıştırılmış tırnak varsa bunun bir yan etkisi vardır
Aadith Ramia

30

Düşüncelerimin daha önce tekrarlandığını görmedim, bu yüzden string.TrimC # için Microsoft belgelerine bakmanızı öneririm , sadece boş alanları kırpmak yerine kırpılacak bir karakter ekleyebilirsiniz:

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

"hello"Bunun yerine withOutQuotes olması gerekir""hello""


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

Bir dizedeki çift tırnak karakterinden kaçmak için \ kullanmanız gerekir.


2
dizede daha fazla katıştırılmış alıntı varsa bunun bir yan etkisi vardır
Aadith Ramia

14

Şunlardan birini kullanabilirsiniz:

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

... ama bunu neden yapmak isteyeceğini merak ediyorum? Öznitelik değerlerini alıntılanmış tutmanın iyi bir uygulama olduğunu düşündüm.


1
Belirli bir bağlantıyı bulmak için HTML Çeviklik Paketi kullanıyorum ve ardından bu bağlantıdaki bir değeri HTML metninden kaldırmam gerekiyor. HTML Çeviklik Paketi öznitelik değerlerinden alıntı yapar, ancak orijinal HTML alıntılanmaz. (Ve tüm bunlar tek bir test için.)
Hatta Mien

1
dizede daha fazla katıştırılmış alıntı varsa bunun bir yan etkisi vardır
Aadith Ramia


5

c #:, "\""dolayısıylas.Replace("\"", "")

vb / vbs / vb.net: ""dolayısıylas.Replace("""", "")


Dize içinde daha fazla alıntı varsa bunun bir yan etkisi vardır
Aadith Ramia

3

Ters eğik çizgi ile çift alıntıdan kaçınmanız gerekir.

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

1
dizede daha fazla katıştırılmış alıntı varsa bunun bir yan etkisi vardır
Aadith Ramia


1

Bu benim için çalıştı

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

Tırnak işaretlerini yalnızca dizenin sonlarından (ortasından değil) ayırmak istiyorsanız ve dizenin her iki ucunda da boşluk olma ihtimali varsa (yani, CSV format dosyasını ayrıştırarak, virgül), ardından Kırp işlevini iki kez çağırmanız gerekir ... örneğin:

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

Bir dizenin içindeyken yan yana iki tırnak, amaçlanan "karakter olarak işlev görür.


1
Dize içinde daha fazla alıntı varsa bunun bir yan etkisi vardır
Aadith Ramia

0

Tek bir karakteri kaldırmak isterseniz, dizileri okumak ve bu karakteri atlamak ve diziyi döndürmek daha kolay sanırım. Özel olarak vcard'ın json'unu ayrıştırırken kullanıyorum. "alıntılanmış" metin tanımlayıcılara sahip kötü bir json olduğu gibi.

Aşağıdaki yöntemi, uzantı yöntemlerinizi içeren bir sınıfa ekleyin.

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

daha sonra bu uzantı yöntemini kullanabilirsiniz:

var text= myString.Remove('"');
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.