【问题标题】:Python treat variable as literal/raw string [closed]Python将变量视为文字/原始字符串[关闭]
【发布时间】:2013-08-05 09:53:02
【问题描述】:

我不敢相信将 变量 视为 原始字符串 有这么难!我已经搜索并找到了类似的问题,但没有正确的答案。

我有一个变量,其中存储了域名。例如'域\用户',我只需要使用re 获取用户名。问题是 Python 为我提供了特殊字符组合的十六进制值,例如当我在字符串中有 \b 时。

我只需要从变量中获取文字字符串即可。

author = list[0] // list[0] contains 'domain\blah'
author = re.sub('.*\\\\(.+)$', r'\1', author)

我希望blah,得到'domain\x08lah'

在开始时将字符串保存为原始字符串不是一种选择,因为我是从其他正则表达式操作中获取字符串的。

有什么想法吗?

编辑:

我错误地假设变量中有一个斜杠。事实上,当从另一个操作中获取变量时,反冲已经被转义了。因此,在尝试创建测试场景时,我将其作为自己的一个问题。

【问题讨论】:

  • list[0] 最初是如何设置的?您在某处定义了一个常规字符串,并没有在那里转义反斜杠。

标签: python string literals


【解决方案1】:

原始字符串文字仅用于创建字符串值,通过避免(大多数)常规字符串文字会使用的字符串转义码。

您的字符串\x08 字符开始;它从未包含反斜杠和b 字符。如果您使用字符串文字定义了 list[0] 中包含的值,则您忘记了转义反斜杠。如果数据来自其他地方,您正在查看原始十六进制字节值 08:

>>> list_0 = 'domain\x08lah'
>>> list_0[6]
'\x08'
>>> len(list_0[6])
1
>>> ord(list_0[6])
8

如果这个字节是两个字符,你可以用字符串替换来修复数据:

>>> list_0.replace('\b', '\\b')
'domain\\blah'

【讨论】:

    猜你喜欢
    • 2014-10-14
    • 1970-01-01
    • 2011-03-31
    • 1970-01-01
    • 2016-11-29
    • 2018-01-23
    • 2020-07-12
    • 2011-05-23
    • 2014-03-03
    相关资源
    最近更新 更多