0

让我们采用以下字符串:

x <- " hello world"

我想提取第一个单词。为此,我使用以下正则表达式^\\W*([a-zA-Z]+).*和对第一组的反向引用。

> gsub("^\\W*([a-zA-Z]+).*", "\\1", x)
[1] "hello"

它按预期工作。

现在,让我们在字符串中添加一个数字和下划线:

x <- " 0_hello world"

我替换\\W[\\W_0-9]匹配新字符。

> gsub("^[\\W_0-9]*([a-zA-Z]+).*", "\\1", x)
[1] " 0_hello world"

现在,它不起作用,我不明白为什么。似乎在放入时出现了问题,\\W[]我不知道为什么。不过,正则表达式适用于使用 PCRE 的在线正则表达式测试器

我究竟做错了什么?

4

1 回答 1

0

快速的解决方案是通过添加一个额外的参数来使用类似 Perl 的正则表达式perl = TRUE

默认情况下,grep使用扩展正则表达式(请参阅?regex),其中字符类以[:xxx:]. 但是,我找不到\W完全匹配的字符类。

于 2019-03-03T12:09:12.890 回答