我试图寻找解决方案,但似乎没有明确的解决方案 我尝试按照空格和大写字母的模式拆分字符串,然后使用 stringr 包。
x <- "Foobar foobar, Foobar foobar"
str_split(x, " [:upper:]")
通常我会得到:
[[1]]
[1] "Foobar foobar," "oobar foobar"
但是,我希望得到的输出应该包括分隔符中的字母:
[[1]]
[1] "Foobar foobar," "Foobar foobar"
可能在字符串中没有像反向引用这样的解决方案,所以我很乐意得到任何帮助。
答案 0 :(得分:3)
您可以使用大写字母后跟1个空格分隔:
> str_split(x, "\\s+(?=[[:upper:]])")
[[1]]
[1] "Foobar foobar," "Foobar foobar"
下面,
\\s+
- 一个或多个空格(?=[[:upper:]])
- 一个positive lookahead(非消费模式),只检查字符串中当前位置右侧的大写字母,而不将其添加到因此,匹配值将其保留在输出中。请注意\s
匹配各种空格字符,而不仅仅是普通的常规空格。此外,it is safer使用[[:upper:]]
而非[:upper:]
- 如果您计划将模式与其他正则表达式引擎(例如PCRE)一起使用。
答案 1 :(得分:0)
我们可以使用正则表达式的外观来分割,
和大写字符之间的空格
str_split(x, "(?<=,) (?=[A-Z])")[[1]]
#[1] "Foobar foobar," "Foobar foobar"