簡體   English   中英

是否有更短的方法從字符串中提取日期?

[英]Is there a shorter way to extract a date from a string?

我編寫了代碼來從給定的字符串中提取日期。 特定

  > "Date: 2012-07-29, 12:59AM PDT"

它提取

  > "2012-07-29" 

問題是我的代碼看起來很冗長而且很麻煩。 我想知道這樣做是否更優雅。

  raw_date = "Date: 2012-07-29, 12:59AM PDT"

  #extract the string from raw date
  index = regexpr("[0-9]{4}-[0-9]{2}-[0-9]{2}", raw_date) #returns 'start' and 'end' to be used in substring

  start = index #start represents the character position 's'. start+1 represents '='
  end = attr(index, "match.length")+start-1
  date = substr(raw_date,start,end); date

您可以使用strptime()來解析時間對象:

R> strptime("Date: 2012-07-29, 11:59AM PDT", "Date: %Y-%m-%d, %I:%M%p", tz="PDT")
[1] "2012-07-29 11:59:00 PDT"
R> 

請注意,我移動了輸入字符串,因為我不確定上午12:59存在...只是為了證明這一點,移動了三個小時(以秒為單位表示基本單位):

R> strptime("Date: 2012-07-29, 11:59AM PDT", 
+>          "Date: %Y-%m-%d, %I:%M%p", tz="PDT") + 60*60*3
[1] "2012-07-29 14:59:00 PDT"
R> 

哦,如果你只是想要約會,那當然更簡單:

R> as.Date(strptime("Date: 2012-07-29, 11:59AM PDT", "Date: %Y-%m-%d"))
[1] "2012-07-29"
R> 

有些事情應該有效:

x <- "Date: 2012-07-29, 12:59AM PDT"
as.Date(substr(x, 7, 16), format="%Y-%m-%d")

至於(幾乎)總是,你有多種選擇。 雖然它們都沒有真正讓你習慣於一些基本的正則表達式語法(或其親密的朋友)。

raw_date <- "Date: 2012-07-29, 12:59AM PDT"

備選方案1

> gsub(",", "", unlist(strsplit(raw_date, split=" "))[2])
[1] "2012-07-29"

備選方案2

> temp <- gsub(".*: (?=\\d?)", "", raw_date, perl=TRUE)
> out <- gsub("(?<=\\d),.*", "", temp, perl=TRUE)
> out
[1] "2012-07-29"

備選方案3

> require("stringr")
> str_extract(raw_date, "\\d{4}-\\d{2}-\\d{2}")
[1] "2012-07-29"

具有反向引用的正則表達式:

> sub("^.+([0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]).+$","\\1","Date: 2012-07-29, 12:59AM PDT")
[1] "2012-07-29"

但@Dirk是正確的,將其解析為日期是正確的方法。

暫無
暫無

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

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