球拍原始字符串

时间:2014-03-23 19:24:12

标签: regex string racket rawstring

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

  

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

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

另见:

1 个答案:

答案 0 :(得分: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."

我喜欢使用~a,因为它会将任何内容转换为字符串,并且只需输入两个字符。

但是,对于正则表达式示例,您无法使用~a#rx。相反,您应该使用regexp

@regexp{(.*)\1}
;; #rx"(.*)\\1"

在所有这些示例中,@function{string}基本上都被视为(function "string")。您可以在at-exp和Scribble的文档中阅读一些细微差别。