Я предполагаю, что у вас есть несколько дат, которые вы хотите извлечь здесь, и что вы хотите, чтобы результатом были типы дат (если нет, просто передайте их в format()
с нужной вам спецификацией strptime()
, например, %e %B %Y
- но преобразование в дату сначала стандартизирует их, потому что, например, здесь у вас есть название месяца в нижнем регистре).
Здесь я использую встроенный в R вектор month.name
полного месяцаимена и создание из него одной строки регулярного выражения, которая будет соответствовать любому тексту с любым именем месяца, окруженным числами даты и года. В итоге мы получаем список символьных векторов, по одному вектору для каждой строки документа, со всеми строками даты, извлеченными из них по порядку, и затем я сопоставляю as_date()
с ними с соответствующим шаблоном анализа, так что они на самом деле являются датами Rсейчас.
library(lubridate)
#>
#> Attaching package: 'lubridate'
#> The following object is masked from 'package:base':
#>
#> date
library(tidyverse)
string <-
"Analysis made on 28 september 2011 people who exercise a lot are healthy
Another analysis on 6 May 1998 found otherwise"
pattern <-
paste("[:digit:]{1,2}", month.name, "[:digit:]{4}",
collapse = "|") %>%
regex(ignore_case = TRUE)
pattern
#> [1] "[:digit:]{1,2} January [:digit:]{4}|[:digit:]{1,2} February [:digit:]{4}|[:digit:]{1,2} March [:digit:]{4}|[:digit:]{1,2} April [:digit:]{4}|[:digit:]{1,2} May [:digit:]{4}|[:digit:]{1,2} June [:digit:]{4}|[:digit:]{1,2} July [:digit:]{4}|[:digit:]{1,2} August [:digit:]{4}|[:digit:]{1,2} September [:digit:]{4}|[:digit:]{1,2} October [:digit:]{4}|[:digit:]{1,2} November [:digit:]{4}|[:digit:]{1,2} December [:digit:]{4}"
#> attr(,"options")
#> attr(,"options")$case_insensitive
#> [1] TRUE
#>
#> attr(,"options")$comments
#> [1] FALSE
#>
#> attr(,"options")$dotall
#> [1] FALSE
#>
#> attr(,"options")$multiline
#> [1] FALSE
#>
#> attr(,"class")
#> [1] "regex" "pattern" "character"
str_extract_all(string, pattern) %>%
map(as_date, tz = "", format = "%e %B %Y")
#> [[1]]
#> [1] "2011-09-28" "1998-05-06"
Создано в 2019-09-29 пакетом Представить (v0.3.0)