Regex - соответствующий текст после n-го '\ n' - PullRequest
0 голосов
/ 21 марта 2019

У меня есть пример текста:

"\n                                                                                    Apr 15, 2019\n                                                                                12:00 PM – 3:00 PMWMC 2502, Burnaby\n                                        "

Я хочу извлечь дату, время и место отдельно.

То, что я думаю, это извлечь что-либо перед вторым "\ n", это должно дать мне "\ n 15 апреля 2019 года". Затем я могу удалить "\ n" и пробелы.
Затем на время я хочу удалить все, что до второго «\ n», и все, что после «PM».
Что касается местоположения, просто оставьте все после PM, затем удалите "\ n" и пробелы.

Вот результат, который я хочу:

[1] Apr 15, 2019
[2] 12:00 PM – 3:00 PM
[3] WMC 2502, Burnaby

Может кто-нибудь сказать мне, как это сделать? Делать это другими способами тоже хорошо.

Спасибо.

Ответы [ 2 ]

0 голосов
/ 21 марта 2019

Вот базовый однострочный R, использующий 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"

Трудно сказать, насколько хорошо это обобщается из-за очень малой строки выборки.

Объяснение: Мыsplit ss на или отрезок, по крайней мере, 2 пробела "\\s{2,}" (это позволяет избежать расщепления на одном пробеле), или в позиции, которой предшествует "[AP]M" черезположительный прогноз и сопровождаемый символом слова (то есть не пробел) через позитивный прогноз "(?<=[AP]M)(?=\\w)".


Пример данных

ss <- "\n                                                                                    Apr 15, 2019\n                                                                                12:00 PM – 3:00 PMWMC 2502, Burnaby\n                                        "
0 голосов
/ 21 марта 2019

Это должно работать, если ваши строки имеют ту же структуру, что и образец текста.

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
...