[python]:关于python字符串文字的问题
代码如下:
line = r'abc\def\n'
rline = re.sub('\\\\', '+', line) # then rline should be r'abc+def+n'
显然,我只想将反斜杠替换为“+”。 我的想法是,行中的反斜杠可以表示为“\”,那么为什么我应该使用“\\”来使 re.sub 正常工作。
我很困惑。
code goes below:
line = r'abc\def\n'
rline = re.sub('\\\\', '+', line) # then rline should be r'abc+def+n'
Apparently, I just want to replace the backslashes in line with '+'.
What I thought was that a backslash in line can be expressed as '\', then why should I use '\\' to get the re.sub work right.
I'm confused.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
在处理正则表达式模式时,始终使用原始字符串是一个好习惯:
不过,为了回答您的问题,Python 将
'\\\\'
解释为两个反斜杠字符:正则表达式规则将两个反斜杠字符解释为一个文字反斜杠。
It's a good habit to always use raw strings when dealing with regex patterns:
To answer your question though, Python interprets
'\\\\'
as two backslash characters:And the rules of regex interpret two backslash characters as one literal backslash.
因为反斜杠有两个级别:
所以
\\\\
(python) -> ;\\
(re.sub) ->;\
编辑
还有如此级别的反斜杠! (它抓住了我!)
Because there are two levels of backslashing:
So
\\\\
(python) ->\\
(re.sub) ->\
EDIT
And the SO level of backslashing! (it got me!)
如果您想搜索文字模式,而不是实际的正则表达式,则应该使用原始字符串和
re.escape()
以避免双反斜杠或任何其他手动完全转义。所以,你的例子将变成:
If you want to search for a literal pattern, not an actual regular expression, you should use both raw strings and
re.escape()
to avoid doubling backslashes or any other manual escaping completely.So, your example would become: