【问题标题】:How do I escape special characters in string (Python 3.7) [duplicate]如何转义字符串中的特殊字符(Python 3.7)[重复]
【发布时间】:2021-07-20 12:37:05
【问题描述】:

我在我们的项目(python3.6)中使用了 re.escape,当我们将 Python 版本升级到 3.7 时,我们遇到了关于字符串中特殊字符的问题。 例如 以下代码在 Python 3.6 和 3.7 中的工作方式不同。 请提出一些替代方案。

import re

re.escape("hey:there")

Python 3.6 输出

"hey\\:there"

Python 3.7 输出

"hey:there"

有哪些可用于 re.escape 的替代方案?或者,除了显式添加 \ 之外,我们如何处理这个问题。

【问题讨论】:

  • 不知道为什么这是个问题。 3.9 的文档说“在 3.7 版中更改:只有在正则表达式中具有特殊含义的字符才会被转义。因此,'!'、'"'、'%'、"'"、','、'/ '、':'、';'、''、'@' 和 "`" 不再转义。” - 所以现在没有转义的字符不需要转义。@987654321 @ - 你能举一个 3.7+ 的行为给你带来问题的例子吗?
  • 如果我们不传递相同的字符串而不转义,弹性搜索会抛出错误。我们正在为弹性搜索查询修改特殊字符
  • re.escape() 仅用于转义 re 的特殊字符。看起来您将不得不编写自己的 elasticsearch_escape() 函数来转义 elasticsearch 使用的特殊字符。
  • 这和re.escape 有什么关系?听起来您正在滥用 re.escape 错误,现在正在寻找替代方案,因为该错误已修复
  • 这能回答你的问题吗? Escaping special characters in elasticsearch

标签: python regex python-3.6 python-3.7


【解决方案1】:

re.escape 用于转义在正则表达式中具有特殊含义的字符。当您想逐字匹配字符串时使用它。如果那是您的用例,则无需更改任何内容。由于python 3.7 只有在正则表达式中具有特殊含义的字符才会被转义。

如果您出于其他原因想要转义字符,re.escape 不是正确的解决方案。什么是正确的解决方案取决于你为什么要逃避什么。

【讨论】:

  • 我想在发送到弹性搜索进行处理之前转义特殊字符。弹性搜索查询要求特殊字符被正确转义,否则我们将结束 search parsing exception 错误。这就是我所在的地方。
  • 那么你应该问的问题是“如何为弹性搜索查询转义文字字符串?”,答案就在这里:stackoverflow.com/questions/40222694/…
猜你喜欢
  • 2011-05-11
  • 2017-11-30
  • 1970-01-01
  • 2021-04-22
  • 1970-01-01
  • 1970-01-01
  • 2011-05-07
  • 1970-01-01
  • 2011-09-02
相关资源
最近更新 更多