[python]:关于python字符串文字的问题

发布于 2024-11-30 05:12:23 字数 219 浏览 0 评论 0原文

代码如下:

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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

并安 2024-12-07 05:12:23

在处理正则表达式模式时,始终使用原始字符串是一个好习惯:

In [45]: re.sub(r'\\', r'+', line)
Out[45]: 'abc+def+n'

不过,为了回答您的问题,Python 将 '\\\\' 解释为两个反斜杠字符

In [44]: list('\\\\')
Out[44]: ['\\', '\\']

:正则表达式规则将两个反斜杠字符解释为一个文字反斜杠。

It's a good habit to always use raw strings when dealing with regex patterns:

In [45]: re.sub(r'\\', r'+', line)
Out[45]: 'abc+def+n'

To answer your question though, Python interprets '\\\\' as two backslash characters:

In [44]: list('\\\\')
Out[44]: ['\\', '\\']

And the rules of regex interpret two backslash characters as one literal backslash.

墨落成白 2024-12-07 05:12:23

因为反斜杠有两个级别:

  1. re.sub 使用 \ 作为转义
  2. Python 使用 \ 作为转义(除非你执行 r'...')

所以 \\\\ (python) -> ; \\ (re.sub) ->; \

编辑

还有如此级别的反斜杠! (它抓住了我!)

Because there are two levels of backslashing:

  1. re.sub uses \ as an escape
  2. Python uses \ as an escape (unless you do r'...')

So \\\\ (python) -> \\ (re.sub) -> \

EDIT

And the SO level of backslashing! (it got me!)

所有深爱都是秘密 2024-12-07 05:12:23

如果您想搜索文字模式,而不是实际的正则表达式,则应该使用原始字符串和 re.escape() 以避免双反斜杠或任何其他手动完全转义。

所以,你的例子将变成:

line = r'abc\def\n'
backslash = re.escape(r'\')
rline = re.sub(backslash, '+', line)

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:

line = r'abc\def\n'
backslash = re.escape(r'\')
rline = re.sub(backslash, '+', line)
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文