簡體   English   中英

正則表達式 (C#):用 \\r\\n 替換 \\n

[英]Regex (C#): Replace \n with \r\n

如何使用 C# 中的正則表達式將 \\n 的單獨實例替換為 \\r\\n(單獨使用 LF 與 CRLF)?

對不起,如果這是一個愚蠢的問題,我是 Regex 的新手。

我知道使用計划String.Replace來做到這一點,例如:

myStr.Replace("\n", "\r\n");
myStr.Replace("\r\r\n", "\r\n");

然而,這是不雅的,並且會破壞文本中已經存在的任何“\\r+\\r\\n”(盡管它們不太可能存在)。

如果你使用它可能會更快。

(?<!\r)\n

它基本上查找前面沒有 \\r 的任何 \\n。 這很可能會更快,因為在另一種情況下,幾乎每個字母都匹配 [^\\r],因此它會捕獲它,然后在此之后查找 \\n。 在我給出的例子中,它只會在找到 \\n 時停止,然后他們會在此之前查看是否找到 \\r

這會嗎?

[^\r]\n

基本上它匹配前面有一個不是 '\\r' 的字符的 '\\n'。

如果您希望它也檢測以單個 '\\n' 開頭的行,請嘗試

([^\r]|$)\n

這表示它應該匹配 '\\n' 但只匹配那些是行的第一個字符或前面沒有'\\r' 的字符

可能有特殊情況需要檢查,因為您弄亂了行本身的定義,“$”可能不太好用。 但我認為你應該明白這一點。

編輯: @Kibbee 使用 look-ahead s 顯然更好,因為它不會捕獲匹配的前面的字符,並且應該有助於處理任何邊緣情況。 所以這里有一個更好的正則表達式 + 代碼變為:

myStr = Regex.Replace(myStr, "(?<!\r)\n", "\r\n");

我試圖對字符串執行下面的代碼,但它不起作用。

myStr.Replace("(?<!\r)\n", "\r\n")

我使用了 Regex.Replace 並且它有效

Regex.Replace( oldValue, "(?<!\r)\n", "\r\n")

我猜“myStr”是一個字符串類型的對象,在這種情況下,這不是正則表達式。 \\r 和 \\n 是 CR 和 LF 的等價物。

我最好的猜測是,如果你知道你的每一行都有一個 \\n,那么你首先應該去掉每個 \\r。 然后用\\r\\n 替換所有\\n。

chakrit 給出的答案也可以,但是你需要使用正則表達式,但是因為你沒有說“myStr”是什么......

編輯:看其他例子告訴我一件事..為什么做困難的事情,當你可以做的時候很容易?,因為有正則表達式,與“必須使用”不同:D

Edit2:當擺弄正則表達式、xpath 和諸如此類的東西會給你帶來奇怪的結果時,一個工具是非常有價值的,我可以給你指出: http : //www.regexbuddy.com/

如果我知道行尾必須是 CRLF 或 LF 之一,那么對我有用的是

myStr.Replace("\r?\n", "\r\n");

這基本上與neslekkiM的答案相同,只是它只對字符串執行一個替換操作而不是兩個。 這也與不支持負回顧或反向引用的正則表達式引擎兼容。

myStr.Replace("([^\r])\n", "$1\r\n");

$ 可能需要是 \\

試試這個: Replace(Char.ConvertFromUtf32(13), Char.ConvertFromUtf32(10) + Char.ConvertFromUtf32(13))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM