我有一个像这样的示例文本:
"\n Apr 15, 2019\n 12:00 PM – 3:00 PMWMC 2502, Burnaby\n "
我想分别提取日期,时间和位置。
我正在想提取第二个“ \ n”之前的所有内容,这应该给我“ \ n 2019年4月15日”。然后,我可以删除“ \ n”和空格。
然后暂时,我要删除第二个“ \ n”之前的所有内容以及“ PM”之后的所有内容。
对于位置,只需在PM之后保留所有内容,然后删除“ \ n”和空白。
这是我想要的结果:
[1] Apr 15, 2019
[2] 12:00 PM – 3:00 PM
[3] WMC 2502, Burnaby
谁能告诉我该怎么做?也可以通过其他方式做到这一点。
谢谢。
答案 0 :(得分:0)
如果您的字符串与示例文本共享相同的结构,这应该可以工作。
library(dplyr)
library(stringr)
str_split(x, "\\n", simplify = T) %>%
trimws() %>%
as.data.frame() %>%
mutate(
time = str_match(V3, "^.+PM"),
location = gsub(time, "", V3)
) %>%
select(
date = 2,
time,
location
)
# date time location
# 1 Apr 15, 2019 12:00 PM – 3:00 PM WMC 2502, Burnaby
答案 1 :(得分:0)
这是使用strsplit
sapply(strsplit(ss, "(\\s{2,}|(?<=[AP]M)(?=\\w))", perl = T), function(x) x[x != ""]) # [,1]
#[1,] "Apr 15, 2019"
#[2,] "12:00 PM – 3:00 PM"
#[3,] "WMC 2502, Burnaby"
由于样本字符串非常小,很难说这具有多大的概括性。
说明:我们在 上分割ss
至少两个空格"\\s{2,}"
(避免在单个空格上分割),或在"[AP]M"
之前通过正向后看的位置,然后在单词字符(即非空格)后通过正向"(?<=[AP]M)(?=\\w)"
进行后跟的位置。
ss <- "\n Apr 15, 2019\n 12:00 PM – 3:00 PMWMC 2502, Burnaby\n "