【问题标题】:Perl's correspondent string literal for Python's prefix r"text"?Perl 对应的 Python 前缀 r"text" 的字符串文字?
【发布时间】:2015-09-19 23:02:47
【问题描述】:

这个thread 是关于Python 的字符串文字r,而这是关于Perl 的here。 但是,我不确定 Perl 中是否存在 Python 前缀 r 的等效命令。

如何在 Perl 的字符串文字中等效地替换 Python 的前缀 r?

【问题讨论】:

标签: python string perl literals


【解决方案1】:

未插值的引用运算符q{} 将帮助您完成大部分工作。只有几个细微的差别。

  1. 分隔符

    有四个用于 Python 原始字符串文字的分隔符:

    • r"..."r'...'
    • r"""..."""r'''...'''

    Perl 中的q... 运算符有更多种类的分隔符

    • 成对的分隔符q(...)q[...]q<...>q{...}
    • 常规分隔符可以是任何其他非字母数字的 7 位 ASCII 字符:q"..."q/.../q#...# 等。
  2. 反斜杠

    反斜杠字符 \ 在 Python 原始文字字符串中始终被解释为文字反斜杠字符。它会转义一个字符,否则会被解释为字符串的结束分隔符

    r'Can\'t believe it\'s not butter'   =>   Can\'t believe it\'s not butter
    

    Perl q{...} 表达式中的反斜杠字符 \ 也是文字反斜杠,但有两个例外:

    • 反斜杠在分隔符之前

      q<18 \> 17 \< 19>     =>   18 > 17 < 19
      q#We're \#1#          =>   We're #1
      
    • 反斜杠位于另一个反斜杠字符之前。在这种情况下,两个反斜杠字符的序列被解释为一个反斜杠。

      q[single \ backslash]           =>  single \ backslash
      q[also a single \\ backslash]   =>  single \ backslash
      q[double \\\ backslash]         =>  double \\ backslash
      q[double \\\\ backslash]        =>  double \\ backslash
      

有一种方法可以在 Perl 中创建真正的“原始”字符串:单引号 here-doc。

my $string = <<'EOS';
'"\\foo
EOS 

这将创建字符串'"\\foo<em>NEWLINE</em>

(那么是否可以在 Python 中创建一个包含 '''""" 的原始字符串文字?)

【讨论】:

  • 添加了最真实的原始 Perl。
  • heredoc 字符串总是以换行符结尾
  • 是的。因为那里实际上有一个换行符。
  • 有没有逃避所有路径的感觉?通常,我在 Python 中使用 r 前缀,所以 q(...) 可能是对应的。我只是注意到我在某些 PATHS 中有回闪,必须在提示符中转义但在 Perl 中没有。等my $file = q(/Users/masi/7-8:2015/). $fileID. q(.raw); 应该可以工作。而my $file = q(/Users/masi/7-8\:2015/). $fileID. q(.raw); 由于反闪而无法工作。打印$file 也会产生反闪,它只是在逃逸。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-04-29
  • 2016-04-28
  • 1970-01-01
  • 1970-01-01
  • 2011-09-02
  • 2016-03-24
  • 1970-01-01
相关资源
最近更新 更多