禁用自动加倍“\”字符Python 2.7 re2 bug

2024-10-02 12:25:56 发布

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

我正在尝试用python2.7构建regex。你知道吗

我有这个密码:

expression = u"(|\s|[.!?\\-])+?(\b%s\b)(\s|[.!?\\-]|\Z)+?" % term

如果我的术语是“技术”,那么我希望得到:

(|\s|[.!?\\-])+?(\btechnologies\b)(\s|[.!?\\-]|\Z)+?

然而,我得到的是:

(|\\s|[.!?\\-])+?(\btechnologies\b)(\\s|[.!?\\-]|\\Z)+?

\s和\Z中的\字符加倍。以前,我用r字符串(r“..regex…”)代替unicode字符串,我的\b字符也会加倍。现在,如果不使用r“”,\b是我所期望的,但是,\s和\Z仍然会加倍。你知道吗

此外,我还编写了一个难看的hack,expression.replace("\\\\", "\\"),希望去掉多余的斜杠。但是,它不起作用。你知道吗

我怎样才能去掉多余的斜杠?你知道吗

谢谢!你知道吗

编辑1:

加上r会让事情变得更糟。你知道吗

输入1:expression = u"(|\s|[.!?\\-])+?(\b%s\b)(\s|[.!?\\-]|\Z)+?" % term

输出1:(|\\s|[.!?\\-])+?(\btechnologies\b)(\\s|[.!?\\-]|\\Z)+?

输入2:expression = r"(|\s|[.!?\\-])+?(\b%s\b)(\s|[.!?\\-]|\Z)+?" % term

输出2:(|\\s|[.!?\\\\-])+?(\\btechnologies\\b)(\\s|[.!?\\\\-]|\\Z)+?

编辑2:

我发现了窃听器,它和替身无关。我在这里讲完后再详细说明。这和re2有关。你知道吗


Tags: 字符串编辑密码unicode字符事情技术replace
1条回答
网友
1楼 · 发布于 2024-10-02 12:25:56

在字符串开头加上r 所以呢

expression = r"(|\s|[.!?\\-])+?(\b%s\b)(\s|[.!?\\-]|\Z)+?" % term

字符串开头的As r关键字告诉python解释器将其视为原始字符串。所以所有的逃逸符都被视为普通符

相关问题 更多 >

    热门问题