我有一个这样的示例文本:
"\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
谁能告诉我怎么做?以其他方式做这件事也很好。
谢谢。
这是使用strsplit
的基本R单线
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
分成至少2个空格"\\s{2,}"
(这可以避免在单个空格上分裂),或者在"[AP]M"
之前通过正面后视并且后跟单词字符(即不是a通过积极的前瞻"(?<=[AP]M)(?=\\w)"
的空白。
ss <- "\n Apr 15, 2019\n 12:00 PM – 3:00 PMWMC 2502, Burnaby\n "
如果您的字符串与示例文本共享相同的结构,则此方法应该有效。
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