转义 Python 字符串中的特殊字符

新手上路,请多包涵

Python 是否有可用于转义字符串中特殊字符的函数?

例如, I'm "stuck" :\ 应该变成 I\'m \"stuck\" :\\

原文由 Wolfy 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 776
2 个回答

使用 re.escape

 >>> import re
>>> re.escape(r'\ a.*$')
'\\\\\\ a\\.\\*\\$'
>>> print(re.escape(r'\ a.*$'))
\\\ a\.\*\$
>>> re.escape('www.stackoverflow.com')
'www\\.stackoverflow\\.com'
>>> print(re.escape('www.stackoverflow.com'))
www\.stackoverflow\.com

在这里重复:

重新转义(字符串)

返回所有非字母数字反斜杠的字符串;如果您想匹配其中可能包含正则表达式元字符的任意文字字符串,这将很有用。

从 Python 3.7 re.escape() 已更改为仅转义对正则表达式操作有意义的字符。

原文由 pyfunc 发布,翻译遵循 CC BY-SA 4.0 许可协议

我很惊讶没有人提到通过 re.sub() 使用正则表达式:

 import re
print re.sub(r'([\"])',    r'\\\1', 'it\'s "this"')  # it's \"this\"
print re.sub(r"([\'])",    r'\\\1', 'it\'s "this"')  # it\'s "this"
print re.sub(r'([\" \'])', r'\\\1', 'it\'s "this"')  # it\'s\ \"this\"

需要注意的重要事项:

  • 搜索 模式中,包括 \ 以及您要查找的字符。您将使用 \ 来转义您的角色,因此您也需要转义 _它_。
  • 搜索 模式括起来,例如 ([\"]) ,这样 替换 模式在它前面添加 \ 时可以使用找到的字符。 (这就是 \1 所做的:使用第一个带括号的组的值。)
  • r 前面的 r'([\"])' 表示它是一个 _原始字符串_。原始字符串使用不同的规则来转义反斜杠。要将 ([\"]) 写成纯字符串,您需要将所有反斜杠加倍并编写 '([\\"])' 。当您编写正则表达式时,原始字符串更友好。
  • 替换 模式中,您需要转义 \ 以将其与替换组之前的反斜杠区分开来,例如 \1 ,因此 r'\\\1' 要将其写 纯字符串,您需要 '\\\\\\1' — 没有人想要它。

原文由 Tim Ruddick 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题