【问题标题】:How to replace \' with ' in Python?如何在Python中用'替换\'?
【发布时间】:2020-10-23 16:34:58
【问题描述】:

我需要清理包含 \' 序列的文本 我想在保留单引号的同时删除反斜杠。我试图在反斜杠和引号之前放置反斜杠,但无济于事。有什么建议吗?

代码:

import re

samplestr="q\\\'q"
print(samplestr)
samplestr=re.sub("\\\'" , "\'",samplestr)
print(samplestr)

输出:

q\'q
q\'q

【问题讨论】:

  • "\\\'" -> "\\\\'"r"\\'"。第二种形式称为“原始字符串文字”。此外,您不需要使用反斜杠进行引用:"\'" -> "'"

标签: python python-3.x text-processing re


【解决方案1】:

这有点令人困惑,因为您使用的是正则表达式。如果您使用常规的replace,您的代码将按原样运行:

samplestr = "q\\\'q"
print(samplestr) # q\'q
samplestr = samplestr.replace("\\\'", "\'") # escape actually unnecessary for single quote
print(samplestr) # q'q

但是,当您使用re.sub 时,第一个参数被视为正则表达式模式,而不是字符串。所以它最终会搜索 regex 模式 \' 的匹配项,这只是一个转义的撇号。要在正则表达式中包含文字反斜杠,您需要使用 \\

为了更好的可读性,您应该使用以r 开头的Python raw string。然后您可以执行以下操作:

samplestr = re.sub(r"\\'", "'", samplestr)
print(samplestr) # q'q

【讨论】:

    【解决方案2】:

    您不需要 regex 模块。

    samplestr = "q\\\'q"
    samplestr.replace("\'", "'")
    

    将完成这项工作。 s.replace(a,b) 函数将在字符串s 中将任何出现的character/string a 替换为b,即,

    a = 'asdfgghhfdaaaaaqwwweaaa'
    a.replace('a','1')
    

    输出:

    '1sdfgghhfd11111qwwwe111'

    对于\,你需要使用\\,因为它是一个转义字符。

    【讨论】:

    • 次要技术细节:额外的 \ 不是必需的,因为 \ 是转义字符,而是因为 \ 是转义序列。 (例如,您还应该转义一个引号,它不是转义字符,但您不必转义不是转义序列的 \y。)
    • 注意:我想在我之前的评论中将反斜杠格式化为代码,但显然 SO 有它自己的转义规则,现在我真的很困惑 ;-)
    猜你喜欢
    • 1970-01-01
    • 2020-07-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-11
    • 2021-10-25
    • 2012-03-18
    相关资源
    最近更新 更多