【发布时间】:2014-10-15 11:14:24
【问题描述】:
我在使用 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)
我也尝试在正则表达式的末尾包含“.*”,但这也不起作用。我试着用一个非常简单的向量来看看我是否能理解发生了什么,但我也得到了非常奇怪的结果。
x <- c('1234', 'abc', '5', 'TRUE', 'FALSE', 'def')
grep('[:digit:]+', x, value=T)
[1] "def"
但是,如果我将 [:digit:] 替换为 "[0-9]" 并删除 [:punct:] 并仅将其替换为逗号,则它会完全按预期工作。
谁能解释我做错了什么以及为什么 [:digit:] 和/或 [:punct:] 选项似乎不起作用?
谢谢!
【问题讨论】:
-
使用
'[[:digit:]]{10,11}[[:punct:]][[:digit:]]{13}'重试。将 POSIX 字符类 ([:digit:]) 视为\d。 -
谢谢!这就是问题所在。您应该将其发布为获得代表的答案! ;)