基于模式从字符串中创建子字符串并保留子字符串内的模式。

3

是否有可能根据匹配单词的模式从字符串中创建子字符串,同时保留匹配部分?

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" 

我希望你能保留字符串匹配部分并将其截取出来。谢谢!
1个回答

2
您可以使用stringr::str_split函数并结合lookaheads来进行分隔,例如:
stringr::str_split(a, "(?=cont)")[[1]]

环视是零宽断言,这意味着它们不会消耗任何字母,因此在这里:正向先行断言作为匹配任何(?=任何单词),匹配跟在任何单词后面的任何

输出:

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" 

2
点赞。如果您能解释为什么 strsplit(a, "(?=cont.*)", perl = T) 不起作用,将获得额外加分。 - Tim Biegeleisen
我也很好奇!那是我的方法,正如@TimBiegeleisen所指出的那样,它不起作用。 - Maurits Evers
@MauritsEvers 它停在了第一个 c。不知道为什么。 - Tim Biegeleisen
@TimBiegeleisen 是的,我也注意到了。我希望你知道为什么。 - Maurits Evers
@TimBiegeleisen,显然这是正确的答案:https://dev59.com/0GUp5IYBdhLWcg3wCD_4 - PKumar

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接