【问题标题】:Properly format a string [duplicate]正确格式化字符串[重复]
【发布时间】:2018-11-08 07:31:06
【问题描述】:

我有这个字符串:

pass__ = 'HSSSTS00008\4Tech'

但是,打印它会返回这种格式:

'HSSSTS00008\x04Tech'

因此,我想在打印后删除特殊字符 x 并具有与 pass__ 相同的值,因为这是对身份验证层的验证。

【问题讨论】:

  • 为什么要使用 python 关键字作为变量?您可以使用原始字符串来解决它,pass = r'HSSSTS00008\4Tech' 将打印 'HSSSTS00008\\4Tech'
  • \4 不是反斜杠后跟数字 4。它是 ASCII 码为 4 的字符。您需要 '\\4'
  • 谢谢。但它正在打印 'HSSSTS00008\\4Tech' ,我想要的结果是我的变量中包含的初始数据,即 'HSSSTS00008\4Tech' 所以 pass__ 应该返回我 'HSSSTS00008\4Tech' 因为 pass__ 是一个密码
  • @JonasAmara \ 的表示是\\,所以这很正常。 print(pass__) 将显示您的期望。

标签: python regex


【解决方案1】:

您可以使用原始字符串,请不要使用 pass as it 作为 python 关键字。

password = r'HSSSTS00008\4Tech'

现在打印会给出

'HSSSTS00008\\4Tech'

【讨论】:

  • 谢谢。但它正在打印 'HSSSTS00008\\4Tech' ,我想要的结果是我的变量中包含的初始数据,即 'HSSSTS00008\4Tech' 所以 pass__ 应该返回我 'HSSSTS00008\4Tech'
  • 不,打印会不会给出'HSSSTS00008\\4Tech',如果有双斜线,它会给出'HSSSTS00008\4Tech',正如要求的那样。这就是练习的重点,对吧? (但是,在解释器中只写变量名会返回双斜杠表示)。
【解决方案2】:

您的字符串中的各个字符并不是您认为的那样。请参阅下面的示例字符串:

"ab\nc" -> "a", "b", "\n", "c"

同样

"HSSSTS00008\4Tech" -> "H", "S", "S", ..., "0", "8", "\x04", "T", ...

如果您尝试使用文字反斜杠后跟文字 4,则应使用“原始字符串”

r"HSSSTS00008\4Tech" -> "H", "S", "S", ... "0", "8", "\", "4", ...

【讨论】:

    【解决方案3】:

    有(至少)两种不同的方式来实现你想要的,要么使用原始字符串(如其他答案所述):

    pass__ = r'HSSSTS00008\4Tech'
    

    或者可以在普通字符串中使用转义序列'\\' 编写它:

    pass__ = 'HSSSTS00008\\4Tech'
    

    这两者都会生成相同的字符串。查看字符串表示时,即,如果您只是在解释器中编写变量名或打印 .__repr__() 表示,您将看到:

    >>> pass__
    'HSSSTS00008\\4Tech'
    >>> print(pass__.__repr__())
    'HSSSTS00008\\4Tech'
    

    因此,字符串的程序表示使用双反斜杠\\。但是在打印字符串时,你会得到一个斜杠:

    >>> print(pass__)
    HSSSTS00008\4Tech
    

    这样做的原因是,单个反斜杠用作转义字符以允许表示例如不可打印的字符为 ''\n'`(新行)。

    也可以使用转义序列来生成任何 unicode 字符,它只是一个反斜杠,后跟描述代码点的数字。因此'\4' 将被解释为代码点 4。当显示表示时,它以十六进制完成,这意味着它将表示为'\x04'

    【讨论】:

      猜你喜欢
      • 2017-09-25
      • 1970-01-01
      • 2014-10-12
      • 2015-01-07
      • 1970-01-01
      • 2018-09-23
      • 2021-12-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多