簡體   English   中英

提取兩個字符之間的文本字符串部分

[英]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函數,但無法采取正確的方法。

我們可以嘗試在此處將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默認情況下使用完整的部門描述作為名稱,因此很難顯示。

對於測試輸入做出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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM