为什么在最后一个左括号后不拆分字符串?
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*\((?=[^(]*$)"
^^^^
我试图通过最后一次出现的左括号 ("(") 拆分字符串,但出于某种原因,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*\((?=[^(]*$)"
^^^^