目標:“2019,3,1”,“2019,03,01”,“2019.03.01”,“2019-03-01”,“'21/3/1”
year<-c("2019,3,1", "2019,03,01", "2019.03.01", "2019-03-01", " '21/3/1", "2019,3-1", "2019-03=01", "2019,03.01", "2019/03-01", "2019-350-01")
grep("",year,value=T)
我試過
grep("[20 ']19([,./-]0?[3])[,./-](0?[1])$",year,value=T)
但我還有“2019,3-1”“2019,03.01”“2019/03-01”
uj5u.com熱心網友回復:
你可以試試這個:
year<-c("2019,3,1", "2019,03,01", "2019.03.01", "2019-03-01", " '21/3/1", "2019,3-1", "2019-03=01", "2019,03.01", "2019/03-01", "2019-350-01")
grep("\\d{2,4}([,./-])\\d{1,2}\\1{1}\\d{1,2}",year,value=T)
詳情:
\\d{2,4}: 數字的長度范圍分別為 2 到 4 年([,./-]): 組字符(默認組 1)。\\d{1,2}: 一個數字的長度范圍分別為 1 或 2 月份\\1{1}: 與 Group 1 中捕獲的值相同,長度為 1\\d{1,2}:一個數字的長度范圍分別為 1 或 2 天
在此處輸入圖片說明
我通常使用regex101進行可視化,但它沒有用于 R。有一個小的修改可以從 python regex 轉換為 R regex。例如在 python 中使用 \d,在 R 中使用 \\d。
希望這有用。
uj5u.com熱心網友回復:
除非您真的需要正則運算式解決方案,否則您可以使用包中的ymd()函式lubridate。
library(lubridate)
ymd(year)
它的輸出:
[1] "2019-03-01" "2019-03-01" "2019-03-01" "2019-03-01" "2021-03-01"
[6] "2019-03-01" "2019-03-01" "2019-03-01" "2019-03-01" NA
Warning message:
1 failed to parse.
決議失敗的是"2019-350-01",顯然不能直接解釋為日期。
uj5u.com熱心網友回復:
正如其他人所指出的,這取決于您對日期的嚴格程度,但是如果您希望將數字之間的任何符號視為區分年/月/日并使用正則運算式
as.Date(gsub("[^0-9]", "/", year),format = "%Y/%m/%d"))
它將數字以外的任何內容轉換為 /,因此,為以 ' 開頭的那個和以 350 月開頭的那個給出 NA
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/328717.html
上一篇:在R中提取歌曲中的匹配項
