grep函数返回意外结果

时间:2014-10-15 11:14:25

标签: regex r grep

我在grep()功能方面遇到了一些问题,我不确定为什么我会得到我的结果。

作为一个极小的可重复的例子,我在一个字符值中有大约98,000个元素,其中未知数量的元素如下所示:

[1] "1234567890,1000005238784,4,09-25-2014 15:01:21,09-25-2014 15:01:54,1,0987654321,0987654321,1,2,\\\\osp1\\ospdata\\714\\717\\725\\25-Sep-14\\dbs\\03.01.21.909_ad54b175ac1af10b60d60cd6ddd0c04b,Transcription\\annotation_1_1.htm,ROUHIP,,,ROUHIP,ROUHIP,1,0987654321,0,1,50,<html><head><title></title><style type=\"text/css\">"

我尝试使用以下正则表达式来提取这些元素,但它又回来了:

h.1 <- grep('[:digit:]{10,11}[:punct:][:digit:]{13}', txt, value=T)

我也试过包括&#34;。*&#34;在正则表达式结束时,但这也没有奏效。我尝试使用一个非常简单的向量来看看我是否能理解发生了什么,但我也得到了非常奇怪的结果。

x <- c('1234', 'abc', '5', 'TRUE', 'FALSE', 'def')
grep('[:digit:]+', x, value=T)
[1] "def"

但是,如果我用&#34; [0-9]&#34;替换[:digit:]并删除[:punct:]并将其替换为逗号,它完全按预期工作。

任何人都可以解释一下我做错了什么以及为什么[:digit:]和/或[:punct:]选项似乎不起作用?

谢谢!

1 个答案:

答案 0 :(得分:5)

您需要将POSIX模式[:digit:]与字符类中的数字匹配。

> x <- c('1234', 'abc', '5', 'TRUE', 'FALSE', 'def')
> grep('[[:digit:]]+', x, value=T)
[1] "1234" "5"