【问题标题】:Python replace with backslash [duplicate]Python用反斜杠替换[重复]
【发布时间】:2019-05-17 07:00:31
【问题描述】:

我有一个字符串,我想在某些字符前添加一个\

我在 terms_string 中有我的字符串,我所做的是:

charmap = {':', '(', ')', '{', '}', '[', ']', '<', '>', '/', '\\', '='}
for key in charmap:
    terms_string = terms_string.replace(key, '\\'+key)

一切正常,但我得到的是 \\ 而不是 \

例如我得到的charmap

{'(', ')', '/', ':', '<', '=', '>', '[', '\\', ']', '{', '}'}

插入

{'(', ')', '/', ':', '<', '=', '>', '[', '\', ']', '{', '}'}

这只发生在字符 \ 上,不会发生在其他字符上。

知道为什么会这样吗? Python配置可能吗?谢谢!

【问题讨论】:

  • 你可以去看看这个stackoverflow.com/questions/24085680/…。你的答案在这里:)
  • 如果我做 print(terms_string) 我得到了双 \,所以我认为有问题。
  • 在尝试替换 \\ 时要达到什么目的?您想将单个 \ 替换为 \\ 或者您想将 \\ 替换为 \\\ ?
  • repr() 返回的 representation 在控制台或序列结构中显示带有两个反斜杠的转义序列。但这实际上只是一个。如果您打印单数字符串,它将正确显示。

标签: python regex replace


【解决方案1】:

我不确定您在替换 \ 时的目标是什么,但这些选项可能对您有用。

terms_string = "foo (bar fo/o: b\a=r)"
charmap = {':', '(', ')', '{', '}', '[', ']', '<', '>', '/', '\\', '='}
for key in charmap:
    terms_string = terms_string.replace(key, "\\{}".format(key))
print(terms_string)
>>> foo \(bar fo\/o\: b\=r\)

import re
terms_string = "foo (bar fo/o: b\a=r)"
result = re.sub(r"([:\(\)\{\}<>/\\=])", r"\\\1", terms_string)
print(result)
>>> foo \(bar fo\/o\: b\=r\)

也可以考虑re.escape

terms_string = "foo (bar fo/o: b\a=r)"
print(re.escape(terms_string))
>>> foo\ \(bar\ fo/o:\ b=r\)

【讨论】:

  • 我想在特殊字符之前添加 \,因为之后我想将该字符串用作正则表达式。我真的很喜欢 re.escape,但在空格之前它添加了一个 \ 而不是用 \s 替换空格,我认为这可能是一个问题
  • 如果你想在正则表达式中使用这些字符串,那么re.escape()实际上就是你需要使用的。我不明白你评论的最后一部分你
  • 通常我在正则表达式中总是用 \s 表示空格。这不是正常的做法吗?
  • 我不是很确定,但也许\s 主要在你想用\s+ 之类的东西捕获多个空间时很有用?
  • 这里他们解释得很好 (stackoverflow.com/questions/47763198/…)。 \s 适用于任何空白字符(空格、制表符、换行符...)。所以我想在这种情况下,一个简单的空间就可以了。
【解决方案2】:

这是因为 \ 是一个转义字符。如果你给出一个 \ ,它会寻找它旁边的字符来理解这意味着什么。因此,对于文字 \,它会放置一个 \\,然后不会转义 \。转义字符是具有特殊含义的字符。例如 '\n' 表示换行。不是文字 \n。希望这能澄清你的疑问。这不仅发生在 python 中,而且发生在大多数语言中。

进一步reading

【讨论】:

  • 那么我怎样才能得到我想要的呢?我认为我做得对,但不知怎的,我的 python 出了点问题。
  • 单条\\要做什么
  • 我只想得到一个\,但我得到了两个。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-10-16
  • 1970-01-01
  • 2013-05-26
  • 2017-06-15
  • 2013-06-24
  • 1970-01-01
  • 2023-01-27
相关资源
最近更新 更多