stringr:如何从通过连接这些句子而得到的字符串中恢复句子

问题描述 投票:1回答:2

我有三个单位字符串,每个字符串都包含逗号(“,”)。每个单位字符串也以大写字母开头。这些字符串已以paste0()方式连接在一起,以逗号(“,”)和空格分隔原始单位字符串。

我在下面提供了R代码,以便为我的问题提供更多的背景信息:

string1 <- "I like dogs, cats, and pigs"
string2 <- "Community health centers, businesses, stores"
string3 <- "Jamie Foxx sings, dances, and acts"
string_combined <- paste0(string1,",",string2,",",string3)
string_combined
[1] "I like dogs, cats, and pigs,Community health centers, businesses, stores,Jamie Foxx sings, dances, and acts"

从上面的控制台输出中可以看到,字符串在以下交界处相遇:

  1. 第一个字符串的最后一个小写字母
  2. 逗号
  3. 第二个字符串的第一个大写字母
  4. 单位字符串的交界处没有空格

我已经使用str_view_all(string = string_combined,pattern = ",\\S")来定位字符串的连接位置,但是我不确定如何恢复原始单位字符串(string1string2string3)。

问题:我如何从较大的字符串(string_combined)中恢复原始的单位字符串,该较大的字符串是单位字符串的串联,认识到原始单位字符串本身包含逗号,因此在串联中被逗号分隔字符串。

也许有人可以帮助回答我的问题。谢谢。

r regex stringr
2个回答
2
投票

您可以使用上述在strsplit中描述的模式

strsplit(string_combined, "(?<=[a-z]),(?=[A-Z])",perl = TRUE)[[1]]

#[1] "I like dogs, cats, and pigs"   "Community health centers, businesses, stores"
#[3] "Jamie Foxx sings, dances, and acts"   

并且与stringr::str_split相似

stringr::str_split(string_combined, "(?<=[a-z]),(?=[A-Z])")[[1]] 

这将字符串分割为小写字母(a-z),后跟逗号(,),再跟大写字母(A-Z)。


1
投票

以下应该起作用:

str_split(string_combined, ',(?=[[:upper:]])')

正则表达式的(?=[[:upper:]])部分指的是紧跟大写字母的模式,并用逗号(,)分隔。在一起,它找到一个逗号,后跟一个大写字母,并用逗号分开。

© www.soinside.com 2019 - 2024. All rights reserved.