首页 > 解决方案 > 为字符串向量获取每个字符串的多个匹配项

问题描述

我有一些如下所示的文本:

P17-Nationalist Revolutionary Movement-Free Bolivia Movement (Movimiento Nacionalista Revolucionario [MNR] - Movimiento Bolivia Libre [MBL] [MNR-MBL])
P18-Socialist Party (Partido Socialista [PS])
P19-Liberty and Justice (Libertad y Justicia [LJ])

All_Election_Parties <- readr::read_lines("All_Election_Parties.txt") 

代码:str_match_all(entry, "(?<=\\[).+?(?=\\])")创建一个匹配列表。

[1] [MBL] 
[2] [MNR-MBL]
[3] [PS]
[4] [LJ]

然而,我想要的是它创建一个列表/列/向量,其中包含每个字符串的所有匹配项的向量/列表。像这样的东西:

[1] [MBL] [MNR-MBL]
[2] [PS]
[3] [LJ]

我怎么做?

标签: rregexstringparsingcharacter

解决方案


您自己的解决方案str_match_all(entry, "(?<=\\[).+?(?=\\])")会创建一个矩阵列表。在每个列表中简单地droping 应该会产生您想要的结果:

entry <- c("P17-Nationalist Revolutionary Movement-Free Bolivia Movement (Movimiento Nacionalista Revolucionario [MNR] - Movimiento Bolivia Libre [MBL] [MNR-MBL])",
           "P18-Socialist Party (Partido Socialista [PS])",
           "P19-Liberty and Justice (Libertad y Justicia [LJ])")


library(stringr)
library(purrr)

str_match_all(entry, "(?<=\\[).+?(?=\\])") %>% map(drop)
#> [[1]]
#> [1] "MNR"     "MBL"     "MNR-MBL"
#> 
#> [[2]]
#> [1] "PS"
#> 
#> [[3]]
#> [1] "LJ"

reprex 包(v0.3.0)于 2019 年 11 月 23 日创建


推荐阅读