球拍原始字符串

Mir*_*lov 2 regex string rawstring racket

在Racket中,您必须在字符串中转义反斜杠,因此Windows路径和正则表达式变得冗长.

例如,正则表达式(.*)\1可以用字符串"(.*)\\1"或正则表达式常量表示#rx"(.*)\\1"; 必须转义正则表达式中的\才能将其包含在字符串或regexp常量中.[来源:Regexp语法 ]

在许多语言中,如Perl和Ruby正则表达式在语法上受支持/\([a-z]+\)/,在其他语言中有可选的原始字符串,如在Python中r"\([a-z]+\)".似乎Racket不支持原始字符串,在本地你不需要逃避反斜杠.是否有任何方法来实现它们,第三方库,提案,等等?

也可以看看:

Gre*_*ott 6

正如克里斯提到的,定制读者可以做到这一点.

您可以使用的Racket已经提供的阅读器示例如下at-exp:

#lang at-exp racket

@~a{C:\Windows\win.ini}
;; "C:\\Windows\\win.ini"

@~a{This is a string
    with newlines.}
;; "This is a\nstring with newlines."
Run Code Online (Sandbox Code Playgroud)

我喜欢使用~a它,因为它将任何东西转换为字符串,并且只需键入两个字符.

但是对于正则表达式示例,您不能使用~a#rx.相反,你应该使用regexp:

@regexp{(.*)\1}
;; #rx"(.*)\\1"
Run Code Online (Sandbox Code Playgroud)

在所有这些例子中,基本上都@function{string}被理解为(function "string").您可以在at-expScribble 的文档中阅读一些细微差别.