为什么在最后一个左括号后不拆分字符串?

Why isn't string splitting after last open parenthesis?

我试图通过最后一次出现的左括号 ("(") 拆分字符串,但出于某种原因,R 和 stringr::str_split 无法识别这一点。

理想情况下,我希望字符串拆分 (PP)

有什么想法吗?

library(stringr)

## Doesn't Work
str_split("Ben Meyers (1), Hank Crone (1) (PP)", "\([^\(]*$", simplify = TRUE)
#>      [,1]                              [,2]
#> [1,] "Ben Meyers (1), Hank Crone (1) " ""

## Works
str_split("Ben Meyers (1), Hank Crone (1) (PP)", "\(", simplify = TRUE)
#>      [,1]          [,2]              [,3]  [,4] 
#> [1,] "Ben Meyers " "1), Hank Crone " "1) " "PP)"

reprex package (v0.2.0) 创建于 2018-12-13。

您可以使用

"\((?=[^(]*$)"

模式是\((?=[^(]*$)

  • \( - 一个 (
  • (?=[^(]*$) - 需要 0 个或更多字符而不是 ( 的正先行,直到紧邻当前位置右侧的字符串末尾。

R 测试:

> library(stringr)
> str_split("Ben Meyers (1), Hank Crone (1) (PP)", "\((?=[^(]*$)", simplify = TRUE)
     [,1]                              [,2] 
[1,] "Ben Meyers (1), Hank Crone (1) " "PP)"

如果你想 "trim" 最后一个左括号之前的元素的空格,你可以在开头添加 \s* (以匹配 0 个或更多空格):

"\s*\((?=[^(]*$)"
 ^^^^

参见regex demo online