R中\ <和\>的意外不对称正则表达式行为

wen*_*wen 5 regex r

让我用下面的例子来说明.

str = "we are friends"
Run Code Online (Sandbox Code Playgroud)

帮助文档说明了这一点

符号\ <和\>匹配单词开头和结尾的空字符串.

因此,预计会发生以下情况,其中在每个单词的末尾添加一个空格.

gsub("\\>"," ", str)
[1] "we  are  friends "
Run Code Online (Sandbox Code Playgroud)

但是,为什么它在使用时不起作用

gsub("\\<"," ", str)
[1] " w e  a r e  f r i e n d s"
Run Code Online (Sandbox Code Playgroud)

有人可以解释为什么会这样吗?如果我想在每个单词的前面添加额外的空格,我需要做什么?

Wik*_*żew 1

这很奇怪,但我认为这被记录为警告

\n\n
\n

POSIX 1003.2 模式gsubgregexpr不能正确处理重复的字边界(例如,pattern = "\\b")。用于perl = TRUE此类匹配(但对于非 ASCII 输入可能无法按预期工作,因为 \xe2\x80\x98word\xe2\x80\x99 的含义取决于系统)。

\n
\n\n

因此,使用\\\\b(?=\\\\w)or :(?<!\\\\w)\\\\bperl=T

\n\n
str = "we are friends"\ngsub(\'(?<!\\\\w)\\\\b\', \' \', str, perl=T)\n
Run Code Online (Sandbox Code Playgroud)\n\n

查看演示

\n\n

输出:[1] " we are friends"

\n