首页 > 解决方案 > 根据模式从字符串创建子字符串,并将模式保留在子字符串中

问题描述

是否可以根据匹配单词的模式从字符串创建子字符串但也保留匹配部分

a <- "contrainte que ilz ne contraint Que ris et jeux mais ne contrainte que jamais on ne contrainte que vous ne contraindre que de ne contraint que l' amour ne contraint que je ne contrainte que je ne contraint que je ne contrainte que l' homme arrive à ne contraint que nous ne contrainte que je ne contraintes que le créateur ne contrainte que l' opium même ne"

当模式存在“cont”时,我很想拆分字符串。

strsplit(a, "cont", perl = T)

 [1] ""                                 "rainte que ilz ne "               "raint Que ris et jeux mais ne "   "rainte que jamais on ne "        
 [5] "rainte que vous ne "              "raindre que de ne "               "raint que l' amour ne "           "raint que je ne "                
 [9] "rainte que je ne "                "raint que je ne "                 "rainte que l' homme arrive à ne " "raint que nous ne "              
[13] "rainte que je ne "                "raintes que le créateur ne "      "rainte que l' opium même ne" 

我想做的是完全相同的,但将匹配部分保留在子字符串中。

谢谢!

标签: rstring

解决方案


您可以使用stringr::str_splitwith lookaheads,例如:

stringr::str_split(a, "(?=cont)")[[1]]

Lookarounds 是零宽度断言,这意味着它们不吃任何字母,所以在这里: Positive lookahead 可以匹配任何东西(?= anyword ) 匹配任何后面跟着anyword的东西,

输出:

stringr::str_split(a, "(?=cont)")[[1]]
 [1] ""                                    
 [2] "contrainte que ilz ne "              
 [3] "contraint Que ris et jeux mais ne "  
 [4] "contrainte que jamais on ne "        
 [5] "contrainte que vous ne "             
 [6] "contraindre que de ne "              
 [7] "contraint que l' amour ne "          
 [8] "contraint que je ne "                
 [9] "contrainte que je ne "               
[10] "contraint que je ne "                
[11] "contrainte que l' homme arrive à ne "
[12] "contraint que nous ne "              
[13] "contrainte que je ne "               
[14] "contraintes que le créateur ne "     
[15] "contrainte que l' opium même ne" 

推荐阅读