grep函数返回意外结果

bri*_*enb 0 regex grep r

我在使用这个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\">"
Run Code Online (Sandbox Code Playgroud)

我尝试使用以下正则表达式来提取这些元素,但它会以空的形式返回:

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

我也尝试在正则表达式的末尾添加".*",但这也不起作用.我尝试使用一个非常简单的向量来看看我是否能理解发生了什么,但我也得到了非常奇怪的结果.

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

但是,如果我将[:digit:]替换为"[0-9]"并删除[:punct:]并将其替换为逗号,则其工作方式与预期完全相同.

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

谢谢!

Avi*_*Raj 5

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

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