正则表达式使用R在字符串中找到多个时间模式

时间:2015-06-09 00:47:09

标签: regex r time

说,如果我有这样一个字符串: 03:30-12:20, 12:30-15:0015:30-18:00 我需要将它们分成一个数组: 03:30 12:20 12:30 15:00 15:30 18:00

有人可以建议我应该使用什么样的正则表达式和R函数吗? 谢谢!

3 个答案:

答案 0 :(得分:2)

尝试:

regmatches(string, gregexpr('\\d\\d:\\d\\d', string))
[[1]]
[1] "03:30" "12:20" "12:30" "15:00" "15:30" "18:00"

请注意,冒号总是被四位数包围。我们用特殊的正则表达式字符\\d重复该模式,这意味着数字。在另一个答案中使用[0-9],如果不是更好的高级正则表达式标记操作,则同样好。我使用\\d显示了达到同一目标的其他途径。

您还可以指定与花括号匹配的位数。在这种情况下,我们正在寻找冒号周围的2位数,

regmatches(string, gregexpr('\\d{2}:\\d{2}', string))
[[1]]
[1] "03:30" "12:20" "12:30" "15:00" "15:30" "18:00"

答案 1 :(得分:2)

我在qdapRegex包中仅为此提供了一个正则表达式。

library(qdapRegex)
x <- '03:30-12:20, 12:30-15:0015:30-18:00'
rm_time(x, extract=T)[[1]]
# [1] "03:30" "12:20" "12:30" "15:00" "15:30" "18:00"

答案 2 :(得分:1)

regmatches(input,gregexpr('\\d{2}:\\d{2}',input))

OR

strsplit(gsub("(\\d{2})(?=\\d{2})","\\1 ,\\2",input,perl=T),',|-')