提取两个字符之间的部分文本字符串

时间:2019-03-03 14:08:26

标签: r regex

我是 R 的新手,并且仍然在学习,因此,我将非常感谢您的帮助或建议。

我有与以下相似的不同字符串:

"Department of Biophysical Chemistry, University of Braunschweig, Braunschweig, Germany; Consejo Superior de Investigaciones Científicas, CCHS, Madrid, Spain;"

然后,我只想提取这些字符串中的国家名称,包括分号,即:

"Germany; Spain;"

对我来说,问题是找出如何从最后一个昏迷中提取出分号,然后重复进行。我尝试了使用gsub函数,但是无法采取正确的方法。

3 个答案:

答案 0 :(得分:1)

我们可以在此处尝试将strsplitsub一起用于基本R选项:

x <- "Department of Biophysical Chemistry, University of Braunschweig, Braunschweig, Germany; Consejo Superior de Investigaciones Científicas, CCHS, Madrid, Spain;"
terms <- sapply(strsplit(x, ";\\s*")[[1]], function(x) {
    sub("^.*\\s+", "", x)
})
output <- paste0(terms, ";", collapse=" ")
output

[1] "Germany; Spain;"

这里的逻辑是首先在模式;\s*上分割用分号分隔的字符串,这将产生一个包含每个部门的列表。然后,我们使用apply删除直到空白(包括空白)的所有内容。最后,我们粘贴折叠以生成另一个用分号分隔的字符串。

注意:我仅出于演示目的更改了输出向量的名称,因为R默认情况下使用完整的部门描述作为名称,因此很难显示。

答案 1 :(得分:1)

对于测试输入,请制作一个3分量向量s,如末尾的注释所示,以便我们可以看到它适用于多行-这里只有三行。

现在,我们可以在gsubfn软件包中使用strapply获得单线解决方案。我们匹配指示的模式,仅将匹配项返回到捕获组,即括号内的部分。然后,对于每一行,我们使用sapplypaste匹配项。

library(gsubfn)

sapply(strapply(s, ", ([^,;]+;)"), paste, collapse = " ")

给予:

[1] "Germany; Spain;" "Germany; Spain;" "Germany; Spain;"

注意

s1 <- "Department of Biophysical Chemistry, University of Braunschweig, Braunschweig, Germany; Consejo Superior de Investigaciones Científicas, CCHS, Madrid, Spain;"
s <- c(s1, s1, s1)

答案 2 :(得分:0)

我只需找到;之前的最后一个逗号,然后使用简单的gsub调用就可以捕获所有逗号。这也适用于向量

gsub(".*?(=?[^,]*;)", "\\1", x, perl = TRUE)
# [1] " Germany; Spain;"