C# วิธี Regex.Replace \r\n (อักขระจริง ไม่ใช่ตัวขึ้นบรรทัดใหม่)

ฉันมีข้อความที่น่ากลัวซึ่งฉันกำลังทำความสะอาดโดยใช้นิพจน์ทั่วไป c# หลายตัว ปัญหาหนึ่งที่ทำให้ฉันนิ่งงันคือมีสตริง '\r\n' หลายตัวในข้อความ ซึ่งเป็นอักขระจริงไม่ใช่ตัวขึ้นบรรทัดใหม่

ฉันพยายามแล้ว:

content = Regex.Replace(content, "\\r\\n", "");

และ:

content = Regex.Replace(content, "\r\n", "");

แต่ทั้งสองไม่ได้ทำงาน ในที่สุดฉันก็ต้องใช้:

content = content.Replace("\\r\\n", "\r\n");

เพื่อให้โปรเจ็กต์เสร็จสิ้น แต่ไม่สามารถทำได้ใน regex ทำให้ฉันรำคาญ


person Skrealin    schedule 30.11.2010    source แหล่งที่มา
comment
สิ่งนี้สามารถช่วยได้ไหม? stackoverflow.com/questions/1981947/ ได้อย่างไร   -  person SubniC    schedule 30.11.2010
comment
content.Replace(@\r\n, \r\n) เป็นตัวเลือกที่ดีที่สุดของคุณ   -  person VVS    schedule 30.11.2010
comment
@เจนส์: แน่นอน ฉันตั้งใจจะบอกว่ามันเป็นตัวเลือกที่ดีที่สุดและดีกว่ามากที่ใช้ regex สำหรับงานเล็กๆ น้อยๆ เช่นนี้   -  person VVS    schedule 30.11.2010
comment
คำถามนี้ตอบที่นี่ โปรดตรวจสอบและเป็นวิธีแก้ปัญหาที่ดี: stackoverflow.com/a/1982317/2208645   -  person Suraj Bhatt    schedule 10.12.2020


คำตอบ (7)


\r และ \n มีความหมายพิเศษใน Regex เช่นกัน ดังนั้นจึงจำเป็นต้องหลีกเครื่องหมายแบ็กสแลช จากนั้น จะต้องหลีกเครื่องหมายแบ็กสแลชเหล่านี้สำหรับสตริง c# ซึ่งนำไปสู่

content = Regex.Replace(content, "\\\\r\\\\n", ""); 

or

content = Regex.Replace(content, @"\\r\\n", ""); 
person Jens    schedule 30.11.2010

เป็นความคิดที่ดีที่จะสร้างนิสัยในการใช้ตัวอักษรสตริงคำต่อคำ (@"example") เมื่อเขียนนิพจน์ทั่วไปใน C# ในกรณีนี้คุณต้องการสิ่งนี้:

content = Regex.Replace(content, @"\\r\\n", "\r\n");

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

person Mark Byers    schedule 30.11.2010

content = Regex.Replace(content, "\\\\r\\\\n", "");

อาจทำงานได้ ข้อมูลเพิ่มเติมที่นี่

อ้าง:

ในสตริง C# ตามตัวอักษร เช่นเดียวกับในภาษา C++ และภาษา .NET อื่นๆ อีกมากมาย แบ็กสแลชเป็นอักขระหลีก สตริงตัวอักษร "\\" เป็นแบ็กสแลชเดี่ยว ในนิพจน์ทั่วไป แบ็กสแลชยังเป็นอักขระหลีกอีกด้วย นิพจน์ทั่วไป \\ จับคู่แบ็กสแลชเดี่ยว นิพจน์ทั่วไปนี้เป็นสตริง C# กลายเป็น "\\\\" ถูกต้อง: แบ็กสแลช 4 อันเพื่อให้ตรงกับอันเดียว

หมายเหตุ: ฉันต้องเขียนแบ็กสแลช 8 อันในประโยคถัดไปจากประโยคสุดท้ายเพื่อให้แบ็กสแลช 4 อันปรากฏขึ้น ;-)

person darioo    schedule 30.11.2010

ภายในสตริงอินพุตที่ระบุ Regex.Replaceจะแทนที่สตริงที่ตรงกับรูปแบบนิพจน์ทั่วไปด้วยสตริงการแทนที่ที่ระบุ

การใช้งานทั่วไปจะเป็น

  string input = "This is   text with   far  too     much   " +  "   whitespace.";
  string pattern = "\\s+";
  string replacement = " ";
  Regex rgx = new Regex(pattern);
  string result = rgx.Replace(input, replacement);

ดูเหมือนจะไม่ใช่สิ่งที่คุณพยายามทำ

person Robin Maben    schedule 30.11.2010

คำตอบที่ดีกว่าและง่ายกว่าอยู่ที่นี่ มันใช้งานได้สำหรับฉันโดยใช้ Regex

public static string GetMultilineBreak(this string content)
{
    return Regex.Replace(content, @"\r\n?|\n", "<br>"); 
}
person Manjunath Bilwar    schedule 05.05.2017

คำถามนั้นเก่าแต่มีการเปลี่ยนแปลง

string temp = Regex.Replace(temp, "\\n", " ");

หรือดีกว่าพอ

string temp = Regex.Replace("tab    d_space  newline\n content here   :P", @"\s+", " ");
//tab d_space newline content here :P

สิ่งนี้ใช้ได้กับ Universal Windows Applications และอาจมีอย่างอื่นด้วย

person Rohit Hazra    schedule 16.02.2016

คาดเดาที่นี่:

var bslash = System.IO.Path.DirectorySeparatorChar.ToString();

content = content.Replace(bslash + "r" + bslash + "n", "");
person Rick Ratayczak    schedule 30.11.2010