簡體   English   中英

使用grepl在R中使用正則表達式提取日期

[英]Extracting Dates Using Regular Expression in R using grepl

我事先表示歉意,這可能是一個重復的問題。 但是,我只花了最后一個小時來解決stackoverflow問題,似乎找不到解決方法。 我在R中使用grepl嘗試提取字符串中的某些日期,並注意到意外行為。

假設我們有一個字符串向量

mystring = c("12-03-99", "A", "B")
date = grepl("[1-9]{2}", mystring)

> date [1] TRUE FALSE FALSE

這對我來說很有意義。 但是,如果我嘗試在正則表達式中添加“-”,則會產生意外的行為。 例如

mystring = c("12-03-99", "A", "B")
date = grepl("[1-9]{2}-[1-9]{2}-[1-9]{2}", mystring)

> date [1] FALSE FALSE FALSE

為什么第二個示例對向量mystring的第一個元素(“ 12-03-99”)產生False?

預先感謝您的幫助!

文森特

Regex101

這是一個簡單的錯誤:

您正在使用[1-9]但您想要[0-9]

由於您的日期12-03-99中包含0 ,因此您需要在字符數組中使用它。

嘗試:

mystring = c("12-03-99", "A", "B")
date = grepl("[0-9]{2}-[0-9]{2}-[0-9]{2}", mystring)

要么

date = grepl("\d{2}-\d{2}-\d{2}", mystring)

正則表達式:

[0-9]{2}-[0-9]{2}-[0-9]{2}

正則表達式可視化

Debuggex演示


注意

這還將捕獲00-00-00作為有效日期。

要解決此問題,只需使用以下正則表達式:

[0-9]?[1-9]-[0-9]?[1-9]-[0-9]?[1-9]

可以簡化為:

\d?[1-9]-\d?[1-9]-\d?[1-9]

然后更改為Regex101

(\d?[1-9]-){2}\d?[1-9]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM