让我们输入以下字符串:
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上使用。
我在做什么错了?
答案 0 :(得分:0)
快速的解决方案是通过添加一个附加参数perl = TRUE
来使用类似Perl的正则表达式。
默认情况下,grep
使用扩展正则表达式(请参阅?regex
),其中字符类以[:xxx:]
的格式定义。但是,我找不到与\W
完全匹配的字符类。