我试图替换所有\\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)
这将会发挥神奇的作用:
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)。