gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 11:24:31 25 4
gpt4 key购买 nike

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com