首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >根据不同的代码定位(具有类似格式)拆分字符串

根据不同的代码定位(具有类似格式)拆分字符串
EN

Stack Overflow用户
提问于 2019-11-22 11:20:38
回答 1查看 60关注 0票数 0

我将一个txt文件上传到R中,如下所示:Election_Parties <- readr::read_lines("Election_Parties.txt"),假设文件中有以下文本:

代码语言:javascript
复制
P23-Andalusian Social Democratic Party (Partido Social-Demócrata Andaluz [PSDA])
P24-Andalusian Socialist Movement (Movimiento Socialista Andaluz [MSA])
P235-Andalusian Socialist Party-Andalucian Party (Partido Socialista Andalucista-Partido
Andalucista [PSA-PA])
P26-Andalusist Party (Partido Andalucista [PA])
P217-Andecha Astur (Andecha Astur [AA])

我想把关于聚会的所有信息都放在一条线上,不管它有多长。所以:

代码语言:javascript
复制
P25-Andalusian Socialist Party-Andalucian Party (Partido Socialista Andalucista-Partido
Andalucista [PSA-PA])

应成为:

代码语言:javascript
复制
P25-Andalusian Socialist Party-Andalucian Party (Partido Socialista Andalucista-Partido Andalucista [PSA-PA])

我想我应该先把所有的文字放在一起:

代码语言:javascript
复制
Election_Parties <- paste(Election_Parties, collapse=" ")

然后在找到组合P**-P***-时将其拆分。最后这部分我该怎么写?

编辑:

我想要应用到的实际数据如下所示:

代码语言:javascript
复制
BOLIVIA
P17-Nationalist Revolutionary Movement-Free Bolivia Movement (Movimiento 
Nacionalista Revolucionario [MNR])
P19-Liberty and Justice (Libertad y Justicia [LJ])
P20-Tupak Katari Revolutionary Movement (Movimiento Revolucionario Tupak Katari [MRTK])

COLOMBIA
P1-Democratic Aliance M-19 (Alianza Democratica M-19 [AD-M19])
P2-National Popular Alliance (Alianza Nacional Popular [ANAPO])
P3-Indigenous Authorities of Colombia (Autoridades Indígenas 
de Colombia)

期望产出:

代码语言:javascript
复制
BOLIVIA
P17-Nationalist Revolutionary Movement-Free Bolivia Movement (Movimiento Nacionalista Revolucionario 
P19-Liberty and Justice (Libertad y Justicia [LJ])
P20-Tupak Katari Revolutionary Movement (Movimiento Revolucionario Tupak Katari [MRTK])

COLOMBIA
P1-Democratic Aliance M-19 (Alianza Democratica M-19 [AD-M19])
P2-National Popular Alliance (Alianza Nacional Popular [ANAPO])
P3-Indigenous Authorities of Colombia (Autoridades Indígenas de Colombia)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-11-22 11:26:47

你可以用

代码语言:javascript
复制
strsplit(paste(Election_Parties, collapse=" "), "\\s+(?=P\\d+-)", perl=TRUE)[[1]]

R演示在线

输出:

代码语言:javascript
复制
[1] "P23-Andalusian Social Democratic Party (Partido Social-Demócrata Andaluz [PSDA])"                              
[2] "P24-Andalusian Socialist Movement (Movimiento Socialista Andaluz [MSA])"                                       
[3] "P235-Andalusian Socialist Party-Andalucian Party (Partido Socialista Andalucista-Partido Andalucista [PSA-PA])"
[4] "P26-Andalusist Party (Partido Andalucista [PA])"                                                               
[5] "P217-Andecha Astur (Andecha Astur [AA])" 

\s+(?=P\d+-)模式与P、1+数字、-后面的1+空白空间相匹配,但P<numbers>-不会被消耗,因为该模式驻留在正的前瞻性构造中,即零宽度断言。由于这种展望,perl=TRUE参数对于使用PCRE引擎处理正则表达式是必要的。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58993208

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档