首页 > 解决方案 > R / stringr:拆分字符串,但在输出中保留分隔符

问题描述

我试图寻找解决方案,但似乎 R 没有明确的解决方案。
我尝试按空格和大写字母的模式分割字符串,并为此使用stringr包。

x <- "Foobar foobar, Foobar foobar"
str_split(x, " [:upper:]")

通常我会得到:

[[1]]
[1] "Foobar foobar," "oobar foobar"  

但是,我想得到的输出应该包括来自分隔符的字母:

[[1]]
[1] "Foobar foobar," "Foobar foobar"

stringr 中可能没有像反向引用这样的开箱即用解决方案,所以我很乐意得到任何帮助。

标签: rregexstringr

解决方案


您可以使用 1+ 个空格进行拆分,后跟一个大写字母:

> str_split(x, "\\s+(?=[[:upper:]])")
[[1]]
[1] "Foobar foobar," "Foobar foobar" 

这里,

  • \\s+- 1 个或多个空格
  • (?=[[:upper:]])-正向前瞻非消耗模式),仅检查字符串中当前位置右侧的大写字母,而不将其添加到匹配值中,因此将其保留在输出中。

请注意,它\s匹配各种空白字符,而不仅仅是普通的常规空格。此外,如果您计划将模式与其他正则表达式引擎(例如 PCRE)一起使用,那么使用它比使用更安全。[[:upper:]][:upper:]


推荐阅读