[英]Extracting parts of text string between two characters
我是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;"
此處的邏輯是首先在模式;\\s*
上分割用分號分隔的字符串,這將產生一個包含每個部門的列表。 然后,我們使用apply
刪除直到最后一個空格(包括最后一個空格)的所有內容。 最后,我們粘貼折疊以生成另一個用分號分隔的字符串。
注意:我僅出於演示目的更改了輸出向量的名稱,因為R默認情況下使用完整的部門描述作為名稱,因此很難顯示。
對於測試輸入做出3分矢量s
作為結尾所示。注意,使我們可以看到,它適用於多行-這里只是三行。
現在,我們可以得到使用一個在線解決方案strapply
在gsubfn包。 我們匹配指示的模式,僅將匹配項返回到捕獲組,即括號內的部分。 然后,對於每一行,我們使用sapply
將匹配項paste
在一起。
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)
我只會在之前找到最后一個逗號;
並使用簡單的gsub
調用捕獲所有內容。 這也適用於矢量
gsub(".*?(=?[^,]*;)", "\\1", x, perl = TRUE)
# [1] " Germany; Spain;"
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.