R-正则表达式:方括号内的W元字符不起作用

时间:2019-03-03 11:43:34

标签: r regex square-bracket metacharacters

让我们输入以下字符串:

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放在[]中时似乎出现了问题,但是我不确定为什么。 正则表达式可在online regex tester using PCRE上使用。

我在做什么错了?

1 个答案:

答案 0 :(得分:0)

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

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