r - 从r中给定的字符串中提取日期

标签 r date-formatting

string<-c("Posted 69 months ago (7/4/2011)")
library(gsubfn)
strapplyc(string, "(.*)", simplify = TRUE)

我应用了上述功能,但没有任何 react 。

在这里我只想提取日期部分,即7/4/2011

最佳答案

第一个显示如何解决问题中的代码以提供所需的答案。接下来的两个解决方案是相同的,除了它们使用不同的正则表达式。第四个解决方案展示了如何使用gsub做到这一点。第五个将gsub分为两个sub调用,第六个使用read.table

1)转义字符问题是(和)在正则表达式中具有特殊含义,因此,如果要按字面意义匹配它们,则必须对其进行转义。通过像下面一样使用"[(]"(或将它们写为"\\("),它们在字面上会匹配。内括号定义捕获组,因为我们不希望捕获组本身包括文字括号:

strapplyc(string, "[(](.*)[)]", simplify = TRUE)
## [1] "7/4/2011"

2)匹配内容另一种方法是匹配数据本身,而不是周围的括号。此处"\\d+"匹配一个或多个数字:
strapplyc(string, "\\d+/\\d+/\\d+", simplify = TRUE)
## [1] "7/4/2011"

如果您想更具体一些,可以指定位数,但是如果数据看起来与问题中的相似,这里似乎没有必要。

3)匹配8个或更多的数字和斜杠鉴于在字符串的其余部分中没有其他仅包含斜杠和数字的8个或更多字符序列,我们可以选择:
strapplyc(string, "[0-9/]{8,}", simplify = TRUE)
## [1] "7/4/2011"

4)删除之前和之后的文本的另一种方法是删除直到(和之后)的所有内容,如下所示:
gsub(".*[(]|[)].*", "", string)
## [1] "7/4/2011"

5)sub 与(4)相同,不同之处在于它将gsub分为两个sub调用,一个调用删除了(直到)为止的所有内容。因此,正则表达式稍微简单一些。
sub(".*\\(", "", sub("\\).*", "", string))

6)read.table 此解决方案完全不使用正则表达式。它在sep中定义了comment.charread.table,以便read.table结果的第二列是所需的日期。
read.table(text = string, sep = "(", comment.char = ")", as.is = TRUE)$V2
## [1] "7/4/2011"

注意:注意,在定义c时不需要string
string <- c("Posted 69 months ago (7/4/2011)")
string2 <- "Posted 69 months ago (7/4/2011)"
identical(string, string2)
## [1] TRUE

关于r - 从r中给定的字符串中提取日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43405615/

相关文章:

r - 以分组观察中的重复为条件的虚拟变量

r - 如何仅显示带有刻面的极地ggplot的部分绘图区域?

r - 使用方法("predict"): no applicable method for 'predict' applied to an object of class "train"

java - com.google.gson.JsonSyntaxException 无法解析的日期

Mysql错误的日期格式

javascript - 在 JavaScript 中将预定义的日期值格式化为 ISO 格式

r - 从 sqldf 查询调用 R 函数

r - 错误(功能(优化程序=“bobyqa”,restart_edge = TRUE,border.tol = 1e-05))

json - 如何在同一结构中对多种日期格式进行 JSON 编码

jquery - 在 jQuery 中获取正确的日期