我在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:]选项似乎不起作用?
谢谢!
答案 0 :(得分:5)
您需要将POSIX模式[:digit:]
与字符类中的数字匹配。
> x <- c('1234', 'abc', '5', 'TRUE', 'FALSE', 'def')
> grep('[[:digit:]]+', x, value=T)
[1] "1234" "5"