删除 R 中特定位置的单词以外的字符串

Remove a string except words in specific position in R

我有以下字符串

string <- c("Trade (% of GDP) – Latin America & Caribbean (WB/WDI/NE.TRD.GNFS.ZS-ZJ)", "Trade (% of GDP) – North America (WB/WDI/NE.TRD.GNFS.ZS-XU)"  )

在此字符串中,我想删除除“中间”句以外的所有内容。

我的预期结果应该是这样的:

excpected_string <- c("Latin America & Caribbean", "North America"  )

谁能帮助我如何使用 gsub

您可以使用正则表达式来做到这一点。基于这两个示例,我确定的两种模式是 1) 删除 - 之前的所有内容,以及 2) 删除括号 ().

中的所有内容

这是一种解决方案:

string <- c("Trade (% of GDP) – Latin America & Caribbean (WB/WDI/NE.TRD.GNFS.ZS-ZJ)", "Trade (% of GDP) – North America (WB/WDI/NE.TRD.GNFS.ZS-XU)"  )
gsub("^.*\s–\s|\s*\([^\)]+\)", "", string)
#> [1] "Latin America & Caribbean" "North America"

reprex package (v0.2.1)

于 2019-03-10 创建

正则表达式的第一部分 ^.*\s–\s 表示 "grab all the characters from the start of the string before we find -"。

在正则表达式中,| 表示或,因此第二个正则表达式 \s*\([^\)]+\ 标识括号内的所有文本(和前导/尾随空格)。该正则表达式归功于 to this question

另一个想法

trimws(sub(".*–([^\(]+).*", "\1", string))
# [1] "Latin America & Caribbean" "North America" 

删除包括 在内的所有内容以及左括号 ( 之后的内容。我们使用捕获组来隔离所需的输出。 trimws 删除前导和尾随空格。