r

时间:2017-11-25 06:51:24

标签: r regex

我需要匹配来自R的字符串中的作者和时间。

test = "Postedby   BeauHDon Friday November 24, 2017 @10:30PM from the cost-effective dept."

我目前正在使用gsub()来查找所需的输出。

预期输出为:

#author
"BeauHDon"
#Month
"November"
#Date
24
#Time
22:30

我到了gsub("Postedby (.*).*", "\\1", test),但输出是

"BeauHDon Friday November 24, 2017 @10:30PM from the cost-effective dept."

另外,我了解time在提取10:30后需要更多编码。

如果下两个字符串为12,则可以添加PM吗?

谢谢。

1 个答案:

答案 0 :(得分:2)

我们可以使用捕获作为一组进行提取(假设模式如示例所示)。这里的模式是匹配一个或多个非白色空格(\\S+),后跟空格(\\s+)来自字符串的开头(^),后跟我们捕获的单词在一个组(\\w+)中,然后在我们跳过下一个单词和空格后捕获单词,然后获取数字((\\d+))和@

之后的时间
v1 <- scan(text=sub("^\\S+\\s+(\\w+)\\s+\\w+\\s+(\\w+)\\s+(\\d+)[^@]+@(\\S+).*",
           "\\1,\\2,\\3,\\4", test), what = "", sep=",", quiet = TRUE)

由于最后一个条目是时间,我们可以使用strptime将其转换为日期时间并更改format,将其分配给最后一个元素

v1[4] <- format(strptime(v1[4],  "%I:%M %p"), "%H:%M")

如果需要,请使用author,Month等设置元素的名称。

names(v1) <- c("#author", "#Month", "#Date", "#Time")
v1
#  #author     #Month      #Date      #Time 
#"BeauHDon" "November"       "24"    "22:30"