发生模式后分割字符串

时间:2018-08-22 00:53:30

标签: r regex stringr

我有以下字符串向量。它包含两个元素。每个元素都由两个折叠的短语组成。

nc -l 5678

我想为向量中的每个元素拆分这些短语。我一直在尝试类似的东西:

nc

这几乎可以满足我的需求:

exchange

我想在图案之后进行分割,但无法弄清楚该怎么做。

我想我已经接近解决方案了,不胜感激。

2 个答案:

答案 0 :(得分:4)

您需要匹配大写字母之前 的位置,而不是初始短语的最后一个字母之前的位置(这是您需要的位置之前的一个字符)。您可以将一个非单词边界与一个大写字母预先匹配:

str_split(strings, "\\B(?=[A-Z])")

如果短语可以包含前导大写字母,但在小写字母开始后不包含任何大写字母,则也可以通过向后查找将它们分开,以获取数字或小写字母。这次不需要非单词边界:

strings <- c("SHOCKING NEWS: someone did somethingThis is another phrase",
         "This is a phrase with the number 2019This is another phrase")
str_split(strings, "(?<=[a-z0-9])(?=[A-Z])")

答案 1 :(得分:2)

替代解决方案。寻找一个小写字母或数字,再跟一个大写字母,并在它们之间进行分割。

strsplit(strings, "(?<=[[:lower:][:digit:]])(?=[[:upper:]])", perl=TRUE)

[[1]]
[1] "This is a phrase with a Name" "This is another phrase"      

[[2]]
[1] "This is a phrase with the number 2019" "This is another phrase"