[英]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?
預先感謝您的幫助!
文森特
這是一個簡單的錯誤:
您正在使用[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}
這還將捕獲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.