R - stringr:如何从通过连接这些句子派生的字符串中恢复句子



我有三个单位字符串,每个字符串都包含逗号(","(。每个单位字符串也以大写字母开头。这些字符串以 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( 中恢复原始单位字符串,这是单位字符串的串联,认识到本身包含逗号的原始单位字符串在串联字符串中用逗号分隔。

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

您可以在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(。

以下方法应该有效:

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

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

最新更新