【问题标题】:grep function returning unexpected resultsgrep 函数返回意外结果
【发布时间】: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
  • 谢谢!这就是问题所在。您应该将其发布为获得代表的答案! ;)

标签: r regex


【解决方案1】:

您需要使用 POSIX 模式 [:digit:] 来匹配字符类中的数字。

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

【讨论】:

  • 谢谢你,解决了问题!
猜你喜欢
  • 2011-05-19
  • 1970-01-01
  • 2013-12-26
  • 2011-12-02
  • 2017-11-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多