r - 如果分隔符前没有 space 则拆分

r - Just split if there is no space before separator

有人知道在某个字符串处使用拆分字符串的方法,但前提是之前没有 space 吗?甚至可以使用 strsplit 函数? 这是一个例子:

input_str = "For example. Production of something a Product.ProIts cool"

我想使用“.ProIts cool”中的 "Pro" 拆分字符串,但不使用 Production 或 Product 中的其他 "Pro"。在任何情况下,Pro 之前都没有一个点,但是如果有人用 "Pro..." 写了一些东西,那么应该总是有一个 space。我也有不同的分隔符。这是我当前的代码,如果文本中没有重复的分隔符,它可以正常工作:

arr_seperators = c("String1", "Pro" , "Contra")
n = 3
output = rep(0,n)
for ( i in 1:n){
  output[i] =  strsplit(input_str, arr_seperators[i])[[1]][2]
  for (j in 1:n){
  output[i] =  strsplit(output[i], arr_seperators[j])[[1]][1] 
  }

}
print(output)
strsplit("For example. Production of something a Product.ProIts cool", 
         "(?<!\s)Pro", perl = TRUE)
# [[1]]
# [1] "For example. Production of something a Product." "Its cool"                                       

(?<!\s) 使用 regex lookaround,在使用与 perl 兼容的正则表达式 (perl=TRUE) 时受支持。

(?<=...)积极的回顾(?<!...) 表示 负面回顾 ,又名 前面没有 \s 是 "whitespace"。环顾四周的前提通常是在 before/after 您的模式存在时进行匹配,但不使用捕获的子字符串中的 preceding/following 文本。

对于非空白,我们还可以使用 (?<=\S) 的正后视。

也许您正在寻找这样的东西? 如果没有,请添加所需的输出..

#split after the delimiter and keep it
base::strsplit( "For example. Production of something a Product.ProIts cool",
                      split = "(?<=.)(?=\.Pro)",
                      perl = TRUE )

[[1]]
[1] "For example. Production of something a Product" ".ProIts cool"