您可以使用正则表达式与匹配您的 AAA、BBB、CCC、DDD 的捕获组。
基本上,编写一个与您的格式匹配的普通正则表达式:
这是一个非常广泛的正则表达式,因为不确定您的“AAA”代表什么:
[^ -]+[ -]+[^ -]+[ -]+\\([^ -]*\\)[ -]+\\[[^ -]*\\]
如果您不熟悉,请查阅基本的正则表达式课程。
然后在要提取的内容周围添加括号;这会创建捕获组。这里我在匹配 AAA、BBB、CCC、DDD 的位周围添加了括号:
([^ -]+)[ -]+([^ -]+)[ -]+\\(([^ -]*)\\)[ -]+\\[([^ -]*)\\]
现在,我们可以简单地使用这个正则表达式来提取相关组。
stringr 包中的函数str_match 可用于提取捕获组。 (我通常建议不要使用 R 基础正则表达式实用程序,因为我发现它们的语法非常不一致......)
VAR <- c("AAA - BB (CC) [DDDD]",
"A - BBB - (CCCC) - [DDD]",
"AA - B - (CCC) - [DDDD]")
library(stringr)
str_match(VAR, "([^ -]+)[ -]+([^ -]+)[ -]+\\(([^ -]*)\\)[ -]+\\[([^ -]*)\\]")
结果:
[,1] [,2] [,3] [,4] [,5]
[1,] "AAA - BB (CC) [DDDD]" "AAA" "BB" "CC" "DDDD"
[2,] "A - BBB - (CCCC) - [DDD]" "A" "BBB" "CCCC" "DDD"
[3,] "AA - B - (CCC) - [DDDD]" "AA" "B" "CCC" "DDDD"