R / stringr:拆分字符串,但在输出中保留分隔符

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

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

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

通常我会得到:

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

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

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

可能在字符串中没有开箱即用的解决方案,如反向引用,所以我很乐意得到任何帮助。

r regex stringr
2个回答
3
投票

您可以使用大写字母后跟1个空格分隔:

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

这里,

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

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


0
投票

我们可以使用正则表达式的外观来分割,和大写字符之间的空格

str_split(x, "(?<=,) (?=[A-Z])")[[1]]
#[1] "Foobar foobar," "Foobar foobar" 
© www.soinside.com 2019 - 2024. All rights reserved.