匹配所有内容,直到冒号的第一个实例

时间:2018-11-04 05:04:11

标签: r regex

尝试在R中编写一个正则表达式以匹配首次出现冒号之前的所有内容。

假设我有:

time = "12:05:41"

我试图仅提取12个。我的策略是执行以下操作:

grep(".+?(?=:)", time, value = TRUE)

但是我得到一个错误,它是一个无效的正则表达式。有想法吗?

1 个答案:

答案 0 :(得分:2)

我认为您的正则表达式似乎还不错,我认为您不应该使用grep,而且您还缺少perl=TRUE,这就是为什么您会收到错误消息。

我建议使用:

stringr::str_extract( time, "\\d+?(?=:)")

grep与这里使用的几乎没有什么不同,它可以匹配单独的值并过滤出具有相似模式的值,但是您不能使用grep在字符串中提取值。

如果您想使用Base R,也可以使用sub

sub("^(\\d+?)(?=:)(.*)$","\\1",time, perl=TRUE)

此外,您可以使用strsplit拆分字符串,并过滤出第一个字符串,如下所示:

strsplit(time, ":")[[1]][1]