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

问题描述 投票:1回答:3

我是R的新手并且还在学习,所以我非常感谢任何帮助或建议。

我有不同的字符串类似于:

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

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

"Germany; Spain;"

我的问题是找出如何从最后一个昏迷中提取分号并重复这样做。我尝试使用gsub功能,但我无法做出正确的方法..

r regex
3个回答
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)

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使用完整的部门描述作为名称,因此很难显示。


0
投票

我只是在;之前找到最后一个逗号,并使用简单的gsub调用捕获所有内容。这也适用于矢量

gsub(".*?(=?[^,]*;)", "\\1", x, perl = TRUE)
# [1] " Germany; Spain;"
© www.soinside.com 2019 - 2024. All rights reserved.