正则表达式 - 将\n中的\\n和\n替换为<br>而不是\\\\n

Bel*_*dar 7 python regex

我试图替换所有\\n\n从字符串,<br>但我不希望\\\\n被替换.

我尝试使用负面lookbehind以下表达式,但它不会返回正确的结果,因为所有"n""\"被替换:

import re
string = "this is a sample\\nstring\\\\ncontaining\nall cases\n\\n\n!"
re.sub(r"(?<!\\)([\\n\n]+)", r"<br>", string)
>>'this is a sample<br>stri<br>g<br>co<br>tai<br>i<br>g<br>all cases<br>!'
Run Code Online (Sandbox Code Playgroud)

预期产出

"this is a sample<br>string\\\\ncontaining<br>all cases<br><br><br>!"
Run Code Online (Sandbox Code Playgroud)

dra*_*oel 4

这将会发挥神奇的作用:

re.sub(r"(?<!\\)\\n|\n", "<br>", string)
Run Code Online (Sandbox Code Playgroud)

注意:它将替换换行符(“\n”)和转义换行符(“\n”或 r“\n”)。它不会转义“\\n”(或r“\n”)。“\\\n”(反斜杠 + 换行符)变为“\\< br>”。

也许,你真正想要的是:

re.sub(r"(?<!\\)(\\\\)*\\n|\n", "\1<br>", string)
Run Code Online (Sandbox Code Playgroud)

这将替换所有新行和所有转义的 n (r"\n")。r"\\n" 不被替换。r"\\\n" 再次被替换(转义的反斜杠 + 转义的 n)。