Select 带点和冒号的数字字符串
Select numeric string with dots and colon
我有这个字符串
string <- "Hospitalization from 25.1.2018 to 26.1.2018", "Date of hospitalization was from 28.8.2019 8:15", "Date of arrival 30.6.2018 20:30 to hospital")
我想在字符串的数字部分(带点和冒号)得到这个
print(dates)
c("25.1.2018", "26.1.2018", "28.8.2019 8:15", "30.6.2018 20:30")
我试过了
dates <- gsub("([0-9]+).*$", "\1", string)
但它只给了我第一个点之前的第一个数字
您可以使用
library(stringr)
unlist(str_extract_all(string, "\d{1,2}\.\d{1,2}\.\d{4}(?:\s+\d{1,2}:\d{1,2})?"))
# => [1] "25.1.2018" "26.1.2018" "28.8.2019 8:15" "30.6.2018 20:30"
参见regex demo。
详情
\d{1,2}
- 一位或两位数
\.
- 一个点
\d{1,2}\.\d{4}
- 一个或两个数字,一个点和四个数字
(?:\s+\d{1,2}:\d{1,2})?
- 可选的出现
\s+
- 一个或多个空格
\d{1,2}:\d{1,2}
- 一位或两位数,:
和一位或两位数。
使用sapply
:
sapply(str_extract_all(string, "[0-9.:]+"), paste0, collapse = " ")
[1] "25.1.2018 26.1.2018" "28.8.2019 8:15" "30.6.2018 20:30"
我有这个字符串
string <- "Hospitalization from 25.1.2018 to 26.1.2018", "Date of hospitalization was from 28.8.2019 8:15", "Date of arrival 30.6.2018 20:30 to hospital")
我想在字符串的数字部分(带点和冒号)得到这个
print(dates)
c("25.1.2018", "26.1.2018", "28.8.2019 8:15", "30.6.2018 20:30")
我试过了
dates <- gsub("([0-9]+).*$", "\1", string)
但它只给了我第一个点之前的第一个数字
您可以使用
library(stringr)
unlist(str_extract_all(string, "\d{1,2}\.\d{1,2}\.\d{4}(?:\s+\d{1,2}:\d{1,2})?"))
# => [1] "25.1.2018" "26.1.2018" "28.8.2019 8:15" "30.6.2018 20:30"
参见regex demo。
详情
\d{1,2}
- 一位或两位数\.
- 一个点\d{1,2}\.\d{4}
- 一个或两个数字,一个点和四个数字(?:\s+\d{1,2}:\d{1,2})?
- 可选的出现\s+
- 一个或多个空格\d{1,2}:\d{1,2}
- 一位或两位数,:
和一位或两位数。
使用sapply
:
sapply(str_extract_all(string, "[0-9.:]+"), paste0, collapse = " ")
[1] "25.1.2018 26.1.2018" "28.8.2019 8:15" "30.6.2018 20:30"