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

R 提取两个字符之间的文本字符串部分,r,regex,R,Regex,我是新来的R,仍在学习中,因此我非常感谢任何帮助或建议 我有不同的字符串,类似于: "Department of Biophysical Chemistry, University of Braunschweig, Braunschweig, Germany; Consejo Superior de Investigaciones Científicas, CCHS, Madrid, Spain;" 然后,我只想提取这些字符串中的国家名称,包括分号,即: "Germany; Spain;"

我是新来的R,仍在学习中,因此我非常感谢任何帮助或建议

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

"Department of Biophysical Chemistry, University of Braunschweig, Braunschweig, Germany; Consejo Superior de Investigaciones Científicas, CCHS, Madrid, Spain;"
然后,我只想提取这些字符串中的国家名称,包括分号,即:

"Germany; Spain;"

我面临的问题是如何从最后一次昏迷中提取分号,并重复这样做。我尝试过使用gsub函数,但未能找到正确的方法。

我们可以尝试使用
strsplit
以及
sub
来选择基本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;"

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

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

library(gsubfn)

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

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

s1我只需找到
前面的最后一个逗号gsub
调用,即可捕获所有内容。这也适用于向量

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

使用正则表达式很容易做到这一点,但如果您只对国家名称或特定类型的信息感兴趣,您应该利用
NER
。感谢大家的帮助和时间!关于上述建议,我还有一个小问题。在某些情况下,如“美国”、“俄罗斯联邦”或类似情况,只给出国家名称的最后一个词,即:“国家”、“联邦”。如何获得具有多个术语的国家的全称?再次感谢并为可能带来的不便表示歉意。请删除表达式中的空格。e、 例如,
gsub(“*?(=?[^,]*;)”,“\\1”,x,perl=TRUE)
。虽然这会在一开始创造一个额外的空间。
gsub(".*?(=?[^,]*;)", "\\1", x, perl = TRUE)
# [1] " Germany; Spain;"