根据这的说法,带有替换组$1 $2的正则表达式\W+([.:,.!?;])(.)做我想做的事情--将空格和标点符号的运行减少到最后的标点符号,一个空格,然后取起原来的位置。就我而言,这是完美的。
然而,当我尝试这个(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; "
这是类型化的球拍,我刚刚更新为球拍6.0。
发布于 2014-03-29 02:41:18
支持基本的和扩展的正则表达式。
要使用包含\W的扩展“Perl”语法,您需要使用pregexp或#px (而不是regexp或#rx):
(define str "ihmb e. ?. ! hrg; ; ")
(regexp-replace* #px"\\W+([.:,.!?;])(.)" str "\\1 \\2")在参考文献中,请读到这一段:
下面完成pregexp的语法,它使用{和}有界的重复,并在范围内外使用\ for meta-字符。
该段上面的内容是基本的regexp和#rx语法。下面是pregexp和#px。
虽然我不知道整个历史,但我认为基本级别是为了向后兼容和方便某些regexp的移植。
就我个人而言,我总是使用pregexp / #px,这样我就可以使用完整的语法了。
https://stackoverflow.com/questions/22725581
复制相似问题