Фильтр даты с отметкой времени с использованием регулярного выражения в R - PullRequest
0 голосов
/ 12 февраля 2019

Я пытаюсь использовать регулярное выражение, чтобы применить фильтр к вектору для извлечения данных, которые соответствуют дате и метке времени, следующим образом: «20.12.2008 18:08» Пример:

vec<-c("house", "1 house", house 1", "12/20/2018 6:08 PM", "12/21/2018 11:49 AM", "01/05/2019 11:21 AM")

Я пробовал следующее:

str_detect(vec, "^[1-9]{2}/[1-9]{2}/[1-9]{2} [1-9]{2}:[1-9]{2} [A,P,M]$")

Но это не соответствует отметке времени.

1 Ответ

0 голосов
/ 12 февраля 2019

Я бы изменил регулярное выражение OP на что-то вроде следующего:

library(stringr)
str_detect(vec, "^[01][0-9]/[0-3][0-9]/[0-9]{4}\\s1?[0-9]:[0-9]{2}\\s[AP]M$")
# [1] FALSE FALSE FALSE  TRUE  TRUE  TRUE

Или в Base R:

grepl("^[01][0-9]/[0-3][0-9]/[0-9]{4}\\s1?[0-9]:[0-9]{2}\\s[AP]M$", vec)
# [1] FALSE FALSE FALSE  TRUE  TRUE  TRUE

Если ваша цель в конечном итоге преобразовать vec вdatetime, мы можем конвертировать напрямую используя as.POSIXct:

datetime_vec <- as.POSIXct(vec, format = "%m/%d/%Y %I:%M %p")
# [1] NA                        NA                        NA                       
# [4] "2018-12-20 18:08:00 EST" "2018-12-21 11:49:00 EST" "2019-01-05 11:21:00 EST"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...