Str_extract不起作用

时间:2015-09-12 03:03:57

标签: regex r stringr

我正在尝试从以下字符中提取第一个时间戳:

" WHENSEPTEMBER 14,2015 @ 11:56 AM - 12:00 PM EDT"

我有一个完整的列表,根据需要它们是矢量。

> is.vector(data$description)
[1] TRUE
> is.vector(data$info)
[1] TRUE

>str_extract(data$info, "\\@ [0-9]+:[0-9]{2}")
Error in stri_extract_first_regex(string, pattern, opts_regex = attr(pattern,  : 
  argument `str` should be a character vector (or an object coercible to)

我意识到我的正则表达式还不完全正确但只是第一次提取。但在这一点上它不会提取任何东西。我不确定我在这里做错了什么。任何帮助表示赞赏。

2 个答案:

答案 0 :(得分:2)

我们是否只需要'HH:MM'部分或者还需要AM/PM并不是很清楚。如果这只是为了在@之后提取空格后提取“HH:MM”,我们可以使用正则表达式((?<=\\@ ))来匹配后跟:后跟两个数字的数字数字。另外,请指定regexfixed

library(stringi)
stri_extract(v1,  regex="(?<=\\@ )[0-9]+:[0-9]{2}")
#[1] "11:56"

或使用stringr

library(stringr)
str_extract(v1, "(?<=\\@ )[0-9]+:[0-9]{2}")
#[1] "11:56"

数据

v1 <- "WHENSEPTEMBER 14, 2015 @ 11:56 AM - 12:00 PM EDT"

答案 1 :(得分:-1)

您的数据向量似乎有些问题。这些函数在您提供的字符串上正常工作:

x <- "WHENSEPTEMBER 14, 2015 @ 11:56 AM - 12:00 PM EDT"
x
[1] "WHENSEPTEMBER 14, 2015 @ 11:56 AM - 12:00 PM EDT"
str_extract(x, "\\@ [0-9]+:[0-9]{2}")
[1] "@ 11:56"