【问题标题】:How to use multiple string literals at once如何一次使用多个字符串文字
【发布时间】:2018-05-19 10:33:01
【问题描述】:

我有一串字节,我想在 re: 中使用:

user_name = 'Simon'
string = 'Hello {user_name}, nice to see you! :)'

然而,除了使用字节,re 字符串应该是原始字符串 (r)。

那么如何同时指定字节、f 字符串和原始字符串?

我试过了:

user_name = rb'Simon'
string = brf'Hello {user_name}, nice to see you! :)'

但是:

In [1]: user_name = rb'Simon'
   ...: string = brf'Hello {user_name}, nice to see you! :)'
  File "<ipython-input-8-93fb315cc66f>", line 2
    string = brf'Hello {user_name}, nice to see you! :)'
                                                       ^
SyntaxError: invalid syntax


In [2]:

我也试过format(),但失败了:

In [2]: string = br'Hello {}, nice to see you! :)'.format(user_name)
---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
<ipython-input-9-36faa39ba31d> in <module>()
----> 1 string = br'Hello {}, nice to see you! :)'.format(user_name)

AttributeError: 'bytes' object has no attribute 'format'

In [3]:

如何指定多个字符串字面量?

【问题讨论】:

  • 是否更准确地说您试图让一个变量同时保存 3 种不同类型的数据?
  • @ScottHunter 不。我正在尝试保存 one 原始字节数组(替换值,因此是 f 字符串)。我想完全取消r,但re 模块似乎强烈推荐它。

标签: python string byte rawstring


【解决方案1】:

字符串插值仅限于字符串,不能用于字节。这是in the PEP

出于同样的原因,我们不支持bytes.format(),您可能不支持 将 'f' 与 'b' 字符串文字结合起来。主要问题是一个 对象的__format__() 方法可能返回不是 与字节字符串兼容。


解决方法是手动将字符串编码为字节:

>>> rf'Hello {user_name}, nice to see you! :)'.encode()
b'Hello Simon, nice to see you! :)'

【讨论】:

    最近更新 更多