Python中r和R字符串前缀之间有区别吗?

ber*_*ers 23 python string visual-studio-code

Visual Studio代码使用前缀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) 
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

这两个符号之间的含义是否有区别?用于不同的约定rR

Kos*_*Kos 40

这些符号之间的含义没有区别.参考:

字符串和字节文字都可以选择以字母"r"或"R"为前缀; 这样的字符串称为原始字符串,并将反斜杠视为文字字符

现在关于VSCode行为:

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

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

突出显示的代码段

现在,看起来像VSCode应该把R"literal"相同的r"literal",而是它的颜色是一样的"literal",这可能是一个微小的错误,没有人察觉,因为每个人都写小写r.

评论更正:这不是一个错误,它是一个功能!VSCode的荧光笔巧妙地利用了前缀rR前缀相同的事实,并允许开发人员通过采用r正则表达式原始字符串和R非正则表达式原始字符串的约定来使用正确的颜色.

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

  • @bers:一般来说,判断给定的原始字符串是代表正则表达式还是路径还是其他任何东西都是不可能的.VS Code似乎假设它是一个正则表达式,要么是因为它对所有原始字符串都这样做,要么是因为它做出了错误的猜测. (9认同)
  • 更多的是一个错误的特征。VSCode 认为原始字符串必须是一个[正则表达式](https://docs.python.org/3/library/re.html),其中 `\A` 和 `\B` 是特殊序列,但 `\ P` 和 `\T` 不是。 (2认同)
  • 他们使用 MagicPython 进行语法突出显示。“MagicPython 遵循这样的约定:小写 r 前缀表示正则表达式字符串,但大写 R 前缀仅表示没有特殊正则表达式语义的原始字符串。” https://github.com/MagicStack/MagicPython#strings (2认同)