分离并根据发生时间图案匹配

问题描述 投票:0回答:2

我想在我的数据帧中的日期分隔文本的内部。我的数据是这样的:

tt <- structure(list(V1 = c("(Q)üfür (2013)", "'Bi atlayip çikicam' cümlesini fazla ciddiye aldiysak zaar (2016)", 
"A'dan Z'ye (o biçim) (1975)", "Gün ortasinda karanlik (Anne) (1990)"
), V2 = c("Ilker Savaskurt", "Bugra Gülsoy", "Ahmet Mekin", 
"Yavuzer Çetinkaya")), .Names = c("V1", "V2"), row.names = c(80404L, 
90699L, 34694L, 53178L), class = "data.frame")

我用这个脚本来分隔文本日期。

pattern <- "[()]"
tt$info <- strsplit(tt$V1,pattern)
tt$Title <-sapply(tt$info, `[[`, 1)
tt$Year <- sapply(tt$info, function(m) (m)[2])

它给人的日期,但也有一些文本具有一个以上的括号内。日期总是文本的结束,所以我需要改变脚本只得到第二个括号。

我曾在这里签到的其他问题,但我不能拿出一个解决方案。提前致谢。

r pattern-matching strsplit
2个回答
1
投票

使用stringistri_extract_last_regex捕获文本的最后一组括号之间的选项

library(stringi)
stri_extract_last_regex(tt$V1, "(?<=\\().*?(?=\\))")
#[1] "2013" "2016" "1975" "1990"

2
投票

通过使用正则表达式,你不需要拆分字符串。尝试这个

tt$year=gsub(".*\\(([0-9]{4})\\).*","\\1", tt$V1)

tt
#>                                                                      V1
#> 80404                                                    (Q)üfür (2013)
#> 90699 'Bi atlayip çikicam' cümlesini fazla ciddiye aldiysak zaar (2016)
#> 34694                                       A'dan Z'ye (o biçim) (1975)
#> 53178                              Gün ortasinda karanlik (Anne) (1990)
#>                      V2 year
#> 80404   Ilker Savaskurt 2013
#> 90699      Bugra Gülsoy 2016
#> 34694       Ahmet Mekin 1975
#> 53178 Yavuzer Çetinkaya 1990

说明:正则表达式匹配的一对括号的4个数字。 gsub()提取匹配的数字。

© www.soinside.com 2019 - 2024. All rights reserved.