ตัดเครื่องหมายคำพูดคู่จากสตริงใน. NET


101

ฉันพยายามจับคู่ HTML ที่มีรูปแบบไม่สอดคล้องกันและจำเป็นต้องตัดเครื่องหมายคำพูดคู่ออก

ปัจจุบัน:

<input type="hidden">

เป้าหมาย:

<input type=hidden>

นี่เป็นสิ่งที่ผิดเพราะฉันหนีไม่ถูก:

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

สิ่งนี้ผิดเพราะไม่มีอักขระอักขระว่าง (ตามความรู้ของฉัน):

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

การผสมอักขระไวยากรณ์ / Escape สำหรับการแทนที่เครื่องหมายคำพูดคู่ด้วยสตริงว่างคืออะไร?

คำตอบ:


215

ฉันคิดว่าบรรทัดแรกของคุณจะใช้งานได้จริง แต่ฉันคิดว่าคุณต้องมีเครื่องหมายอัญประกาศสี่ตัวสำหรับสตริงที่มีบรรทัดเดียว (อย่างน้อยใน VB):

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

สำหรับ C # คุณจะต้องออกจากเครื่องหมายคำพูดโดยใช้แบ็กสแลช:

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

1
สิ่งนี้มีผลข้างเคียงหากมีเครื่องหมายคำพูดที่ฝังอยู่ในสตริงมากขึ้น
Aadith Ramia

30

ฉันไม่เห็นความคิดของฉันซ้ำแล้วซ้ำอีกดังนั้นฉันจะแนะนำให้คุณดูstring.Trimในเอกสารของ Microsoft สำหรับ C # คุณสามารถเพิ่มตัวละครที่จะตัดแต่งแทนที่จะเพียงแค่ตัดแต่งช่องว่าง:

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

ควรส่งผลให้ withOutQuotes ถูก"hello"แทนที่ด้วย""hello""


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

คุณต้องใช้ \ เพื่อหลีกเลี่ยงอักขระอัญประกาศคู่ในสตริง


2
สิ่งนี้มีผลข้างเคียงหากมีเครื่องหมายคำพูดที่ฝังอยู่ภายในสตริง
Aadith Ramia

14

คุณสามารถใช้อย่างใดอย่างหนึ่งต่อไปนี้:

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

... แต่ฉันอยากรู้ว่าทำไมคุณถึงอยากทำแบบนั้น? ฉันคิดว่าเป็นแนวทางปฏิบัติที่ดีในการเก็บค่าแอตทริบิวต์ที่ยกมา?


1
ฉันใช้ HTML Agility Pack เพื่อค้นหาลิงก์บางลิงก์จากนั้นฉันจำเป็นต้องลบค่าในลิงก์นั้นออกจากข้อความ HTML HTML Agility Pack จะเสนอราคาค่าแอตทริบิวต์ แต่ HTML ดั้งเดิมจะไม่ถูกยกมา (และทั้งหมดนี้เป็นเพียงการทดสอบเดียว)
แม้แต่เมี่ยน

1
สิ่งนี้มีผลข้างเคียงหากมีเครื่องหมายคำพูดที่ฝังอยู่ภายในสตริง
Aadith Ramia


5

c #: "\""ดังนั้นs.Replace("\"", "")

vb / vbs / vb.net: ""ดังนั้นs.Replace("""", "")


สิ่งนี้มีผลข้างเคียงหากมีเครื่องหมายคำพูดที่ฝังอยู่ภายในสตริง
Aadith Ramia

3

คุณต้องหลีกเลี่ยงเครื่องหมายอัญประกาศคู่ด้วยแบ็กสแลช

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

1
สิ่งนี้มีผลข้างเคียงหากมีเครื่องหมายคำพูดที่ฝังอยู่ภายในสตริง
Aadith Ramia


1

สิ่งนี้ได้ผลสำหรับฉัน

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

หากคุณต้องการตัดเครื่องหมายคำพูดจากส่วนท้ายของสตริงเท่านั้น (ไม่ใช่ตรงกลาง) และมีโอกาสที่จะมีช่องว่างที่ปลายด้านใดด้านหนึ่งของสตริง (เช่นการแยกวิเคราะห์ไฟล์รูปแบบ CSV ซึ่งมีช่องว่างหลัง เครื่องหมายจุลภาค) จากนั้นคุณต้องเรียกใช้ฟังก์ชัน Trim สองครั้ง ... ตัวอย่างเช่น:

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

เครื่องหมายคำพูดสองคำที่อยู่ติดกันจะทำหน้าที่เป็นอักขระ "ที่ตั้งใจไว้เมื่ออยู่ในสตริง


1
สิ่งนี้มีผลข้างเคียงหากมีเครื่องหมายคำพูดที่ฝังอยู่ภายในสตริง
Aadith Ramia

0

หากคุณต้องการลบอักขระเดี่ยวฉันเดาว่าง่ายกว่าเพียงแค่อ่านอาร์เรย์และข้ามอักขระนั้นและส่งคืนอาร์เรย์ ฉันใช้เมื่อแยกวิเคราะห์ json ของ vcard ที่กำหนดเอง เนื่องจากเป็น json ที่ไม่ดีที่มีตัวระบุข้อความ

เพิ่มวิธีการด้านล่างลงในคลาสที่มีวิธีการขยายของคุณ

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

จากนั้นคุณสามารถใช้วิธีการขยายนี้:

var text= myString.Remove('"');
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.