根据this,带有替换组\W+([.:,.!?;])(.)
的正则表达式$1 $2
完全符合我的要求 - 将空格和标点符号的运行减少到最后的标点符号,即空格,然后回到原处。就我的目的而言,这是完美的。
然而,当我尝试这个(regexp-replace* #rx"\\W+([.:,.!?;])(.)" str "\\1 \\2")
时
我只是str
未经修改。
> (define str "ihmb e. ?. ! hrg; ; ")
> (regexp-replace* #rx"\\W+([.:,.!?;])(.)" str "\\1 \\2")
- : String
"ihmb e. ?. ! hrg; ;"
但我期待ihmb e! hrg; "
这是在Typed Racket中,我刚刚更新到Racket 6.0
答案 0 :(得分:2)
Racket支持基本和扩展正则表达式。
要使用包含\W
的扩展“Perl-ish”语法,您需要使用pregexp
或#px
(不是regexp
或#rx
) :
(define str "ihmb e. ?. ! hrg; ; ")
(regexp-replace* #px"\\W+([.:,.!?;])(.)" str "\\1 \\2")
在the reference中读到,直到你看到这一段:
以下内容完成了pregexp的语法,该语法使用{和}有界重复,并使用\作为范围内外的元字符。
该段落上方的内容是基本的regexp
和#rx
语法。以下内容为pregexp
和#px
。
虽然我不知道整个历史,但我认为基本级别是为了向后兼容并轻松移植某些正则表达式。
我个人总是使用pregexp
/ #px
,所以我知道我可以使用完整的语法。