【问题标题】:Is there a difference between capital and lowercase string prefixes?大写和小写字符串前缀之间有区别吗?
【发布时间】:2018-03-19 08:30:28
【问题描述】:

Visual Studio Code 以不同的方式突出显示前缀为 rR 的字符串文字:

Match = re.search(r"\d{2} \d{4} \d{2}:\d{2}:\d{2})", Output) 
Match = re.search(R"\d{2} \d(4} \d{2}:\d{2}:\d{2})", Output) 

这两种符号的含义有区别吗? rR 是否使用不同的约定? "b""u""f" 等其他前缀呢?

【问题讨论】:

  • 根据Python docs,什么都没有
  • 恢复我的edit 是粗鲁的,我花时间将您的图像转换为可搜索的文本。如果您想重新添加图像,您可以在后续编辑中这样做。
  • @StefanCrain 对不起,第一次。固定。

标签: python string visual-studio-code


【解决方案1】:

这些符号在含义上没有区别。 Reference:

字符串和字节文字都可以选择以字母“r”或“R”作为前缀;此类字符串称为原始字符串,并将反斜杠视为文字字符

其他前缀也是如此。


现在关于 VSCode 行为:

  • 第一次着色(黄色{2})发生在编辑器假定您正在编写正则表达式时,
  • 第二个(蓝色{2})发生在编辑器认为您正在编写格式字符串时,例如"{0}, {1}!".format("Hello", "world")

当我们添加更多语法时,这一点变得更加明显:

现在,看起来 VSCode 应该将 R"literal" 视为与 r"literal" 相同,但它会将其着色为与 "literal" 相同,这可能是一个没有人发现的小错误,因为每个人都写小写 @987654334 @.

来自comment 的更正:这不是错误,而是功能! VSCode's highlighter 巧妙地利用了 rR 前缀是等价的这一事实,并允许开发人员通过采用使用 r 用于正则表达式原始字符串和 R 用于非正则表达式原始字符串。

原始字符串通常被解释为正则表达式。这有点问题,因为根据应用程序,这实际上可能不是最常见的情况。 (...) MagicPython 遵循一个约定,小写的 r 前缀表示正则表达式字符串,而大写的 R 前缀表示没有特殊正则表达式语义的原始字符串。

【讨论】:

  • 谢谢!因此,如果R... 的着色是一个错误,那么假设r"C:\Adam\Betty\Peter\Tom" 的着色(带有黄色PT)是另一个错误是否合理?
  • 更多的错误特征。那是 VSCode 认为原始字符串必须是 regular expression,其中 \A\B 是特殊序列,但 \P\T 不是。
  • @bers:一般来说,实际上不可能判断给定的原始字符串是否应该表示正则表达式或路径或其他任何内容。 VS Code 似乎假设这是一个正则表达式,要么是因为它对所有原始字符串都这样做,要么是因为它做出了错误的猜测。
  • 他们使用 MagicPython 进行语法高亮。 MagicPython follows a convention that a lower-case r prefix means a regexp string, but an upper-case R prefix means just a raw string with no special regexp semantics.github.com/MagicStack/MagicPython#strings
  • @voidvector 非常感谢!我很高兴得知这是记录在案的行为 - 我将此添加到答案中。
【解决方案2】:

一般来说,Python 是区分大小写的。但是,根据string literal 语法规范,字符串前缀可以是大小写(或顺序)。所以区别是视觉上的,虽然传统主要是使用小写字母,而大写字母可能更难区分。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-10-01
    • 1970-01-01
    • 2017-09-28
    • 1970-01-01
    • 2022-11-22
    • 1970-01-01
    • 2020-09-13
    • 2021-05-31
    相关资源
    最近更新 更多