C# cara Regex.Replace \r\n (karakter sebenarnya, bukan jeda baris)

Saya mendapat beberapa teks mengerikan yang saya bersihkan menggunakan beberapa ekspresi reguler c#. Satu masalah yang membuat saya bingung adalah ada sejumlah string '\r\n' dalam teks, karakter sebenarnya bukan jeda baris.

Saya sudah mencoba:

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

Dan:

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

tapi tak satu pun dari mereka bekerja. Pada akhirnya saya harus menggunakan:

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

untuk menyelesaikan proyek, tetapi tidak dapat melakukannya dalam regex mengganggu saya.


person Skrealin    schedule 30.11.2010    source sumber
comment
bisakah ini membantu? stackoverflow.com/questions/1981947/   -  person SubniC    schedule 30.11.2010
comment
content.Replace(@\r\n, \r\n) adalah pilihan terbaik Anda.   -  person VVS    schedule 30.11.2010
comment
@Jens: Tentu saja. Maksud saya, ini adalah pilihan terbaik dan jauh lebih baik daripada menggunakan regex untuk tugas sepele.   -  person VVS    schedule 30.11.2010
comment
Pertanyaan ini terjawab di sini, tolong periksa dan solusi yang bagus: stackoverflow.com/a/1982317/2208645   -  person Suraj Bhatt    schedule 10.12.2020


Jawaban (7)


\r, dan \n juga memiliki arti khusus di Regex, jadi garis miring terbalik harus di-escape. Kemudian, garis miring terbalik ini perlu di-escape untuk string c#, yang mengarah ke

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

or

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

Sebaiknya biasakan menggunakan string literal kata demi kata (@"example") saat menulis ekspresi reguler di C#. Dalam hal ini Anda memerlukan ini:

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

Jika tidak, Anda harus menghindari setiap garis miring terbalik dua kali: sekali untuk menghindarinya dalam string C#, dan kedua kalinya untuk menghindarinya untuk ekspresi reguler. Jadi satu garis miring terbalik akan menjadi empat garis miring terbalik dengan literal string standar.

person Mark Byers    schedule 30.11.2010

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

mungkin berhasil. Info lebih lanjut di sini.

Mengutip:

Dalam string C# literal, serta dalam C++ dan banyak bahasa .NET lainnya, garis miring terbalik adalah karakter escape. String literal "\\" adalah garis miring terbalik tunggal. Dalam ekspresi reguler, garis miring terbalik juga merupakan karakter escape. Ekspresi reguler \\ cocok dengan satu garis miring terbalik. Ekspresi reguler ini sebagai string C#, menjadi "\\\\". Benar: 4 garis miring terbalik untuk mencocokkan satu garis miring terbalik.

Catatan: Saya harus menulis 8 garis miring terbalik di sebelah kalimat terakhir sehingga 4 garis miring terbalik akan ditampilkan ;-)

person darioo    schedule 30.11.2010

Dalam string masukan yang ditentukan, Regex.Replacemengganti string yang cocok dengan pola ekspresi reguler dengan string pengganti yang ditentukan.

Penggunaan yang umum adalah

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

Sepertinya bukan itu yang Anda coba lakukan.

person Robin Maben    schedule 30.11.2010

Jawaban yang lebih baik & sederhana ada di sini. Ini berfungsi untuk saya menggunakan Regex.

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

Pertanyaannya sudah lama tetapi sudah ada perubahan.

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

atau cukup baik

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

Ini berfungsi pada Aplikasi Windows Universal dan mungkin yang lain juga.

person Rohit Hazra    schedule 16.02.2016

Tebakan liar di sini:

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

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