Regex将字符串中的\\n和\n替换为<br>而不是\\\\n

2024-05-19 10:08:17 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图用<br>替换字符串中的所有\\n和{},但我不希望{}被替换。在

我尝试使用negative 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>!'

预期产量

^{pr2}$

Tags: sample字符串brimportrestringis表达式
3条回答

也许这会找到你想要的,然后你可以用<br>:
(?<!\\)(\\)n|(?<!\\)(\\\\)n

正则表达式具有匹配[\\n\n]的字符类\n或{}。您的lookbehind逻辑是正确的,您只需将character类更改为不同的子模式:\\{1,2}n。在

See regex in use here

(?<!\\)\\{1,2}n
  • (?<!\\)确保前面的不是{}
  • \\{1,2}匹配\一次或两次
  • n逐字匹配

替换:<br>

备选方案:(?<!\\)\\\\?n,由@revo在问题下面的评论中提供


代码

中的用法

See in use here

^{pr2}$

结果:this is a sample<br>string\\\\ncontaining<br>all cases<br><br><br>!

这将产生魔力:

re.sub(r"(?<!\\)\\n|\n", "<br>", string)

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

也许,你真正想要的是:

^{pr2}$

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

相关问题 更多 >

    热门问题