尝试在R中编写一个正则表达式以匹配首次出现冒号之前的所有内容。
假设我有:
time = "12:05:41"
我试图仅提取12个。我的策略是执行以下操作:
grep(".+?(?=:)", time, value = TRUE)
但是我得到一个错误,它是一个无效的正则表达式。有想法吗?
答案 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]