【问题标题】:Escape single quotes between specific text [duplicate]在特定文本之间转义单引号 [重复]
【发布时间】:2021-05-01 15:39:44
【问题描述】:

您好,我正在尝试转义特定文本之间的单引号。

我的字符串

a = "{'content': 'Roberto Delacruz'}"

如果我使用这个命令

a=a.replace(r"'", r"\'")

它给了我以下输出

"{\\'content\\': \\'Roberto Delacruz\\'}"

如何在这个字符串之间转义单引号

内容':''

上述指定文本之间的任何单引号都应转义。

示例:content':'O'Cornor'(此名称有单引号)。

一些补充说明 我的实际字符串看起来像这样 "[('name', 'product'), ('type', 'html'),('content', 'O'Cornor')]" O'Cornor 是单引号内的人名。这个名字也有单引号。我只需要转义这个单引号。 该字符串将在命令行中使用

python -m myscript.py "[('name', 'product'), ('type', 'html'),('content', 'O'Cornor')]"

【问题讨论】:

  • 您能否解释一下您希望如何利用转义单引号的结果。是否可以打印结果,存储在数据库中,存储在 DataFrame 或其他东西中?
  • 我为字符串添加了一些解释。
  • 谁/什么在生成字符串?你是如何在myscript.py 处理它的?这听起来像是“故意注入命令”——为什么字符串中的值没有针对它们的预期上下文正确转义?

标签: python-3.x regex


【解决方案1】:

使用命令

a=a.replace(r"'", r"\'")

会给你你想要的。但你必须使用以下内容:

print(a)

查看实际结果。只需在解释器上输入 a 就会显示字符串的 repr 版本。下图会一目了然。

更多信息请见here

【讨论】:

  • 谢谢。无论如何,只有内容标签('content','O'Cornor')才能转义单引号。内容键是键,值是 O'Cornor?
  • 看我的第二个答案。
【解决方案2】:

对于您问题的第二部分,您可以使用正则表达式:

import re
a="[('name', 'product'), ('type', 'html'),('content', 'O'Cornor')]"
a=re.sub(r", '([^\(\),]*)'([^\(\),]*)'\)", r", '\1\\'\2'", a)
print(a) #[('name', 'product'), ('type', 'html'),('content', 'O\'Cornor']

有关使用正则表达式替换字符串子字符串的更多信息,请参阅here

【讨论】:

    【解决方案3】:

    这不是事后可以做的事……

    python -m myscript.py "[('name', 'product'), ('type', 'html'),('content', 'O'Cornor')]"
    

    这里的字符串不是'O'Cornor',而是'O',后面跟着无效的语法。输入无法解析,您的程序将无法编译。它永远不会运行,因此您的正则表达式永远不会被执行。您需要在源中提供正确终止的字符串。多种选择:

    python -m myscript.py "[('name', 'product'), ('type', 'html'),('content', 'O\\'Cornor')]" # double backslash required for shell: \\' in the shell string literal becomes \' in the python string literal, becomes ' in the final python string value
    python -m myscript.py "[('name', 'product'), ('type', 'html'),('content', \"O'Cornor\")]"
    python -m myscript.py '[("name", "product"), ("type", "html"),("content", "O'"'"'Cornor")]'
    

    试试看:

    $ python -c "print('O'Cornor')"
    File "<string>", line 1
        print('O'Cornor')
                 ^
    SyntaxError: invalid syntax
    
    $ python -c "print(\"O'Cornor\")"
    O'Cornor
    
    $ python -c "print('O\\'Cornor')"
    O'Cornor
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-03-11
      • 1970-01-01
      • 2016-12-17
      • 2020-12-27
      • 2012-12-27
      • 2014-10-10
      • 2023-02-11
      • 1970-01-01
      相关资源
      最近更新 更多