Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用R中的正则表达式过滤带有时间戳的日期_R_Regex - Fatal编程技术网

使用R中的正则表达式过滤带有时间戳的日期

使用R中的正则表达式过滤带有时间戳的日期,r,regex,R,Regex,我尝试使用正则表达式对向量应用过滤器,以便以以下方式检索与日期和时间戳匹配的数据:“12/20/2018 6:08 PM” 例如: 但这与时间戳不匹配。我将OP的正则表达式更改为如下内容: str_detect(vec, "^[1-9]{2}/[1-9]{2}/[1-9]{2} [1-9]{2}:[1-9]{2} [A,P,M]$") library(stringr) str_detect(vec, "^[01][0-9]/[0-3][0-9]/[0-9]{4}\\s1?[0-9]:[0-9]

我尝试使用正则表达式对向量应用过滤器,以便以以下方式检索与日期和时间戳匹配的数据:“12/20/2018 6:08 PM” 例如:


但这与时间戳不匹配。

我将OP的正则表达式更改为如下内容:

str_detect(vec, "^[1-9]{2}/[1-9]{2}/[1-9]{2} [1-9]{2}:[1-9]{2} [A,P,M]$")
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
或在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
转换为日期时间,我们可以使用
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"

datetime\u vec您的意思是
[0-9]
,而不是
[1-9]
。您的正则表达式与零不匹配。此外,最后必须有
[AP]M
。还有更多的东西,比如量词。。。请参见
^[0-9]{1,2}/[0-9]{1,2}/[0-9]{4}[0-9]{1,2}:[0-9]{2}[AP]M$
()另一个不涉及正则表达式的选项是首先使用lubridate将向量转换为datetime,然后找到它不在哪里
NA
!is.na(lubridate::mdy_hm(vec))
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"