删除字符串中的尾部括号

afr*_*ect 6 regex r gsub str-replace dplyr

我正在尝试修剪 R 字符串列表中的尾随方括号、内部引号和斜杠,最好使用dplyr.

样本数据:

df <- c("['Mamie Smith']", "[\"Screamin' Jay Hawkins\"]")
Run Code Online (Sandbox Code Playgroud)

预期结果:

"Mamie Smith", "Screamin' Jay Hawkins"
Run Code Online (Sandbox Code Playgroud)

我尝试过的:

"Mamie Smith", "Screamin' Jay Hawkins"
Run Code Online (Sandbox Code Playgroud)
df %>%
  str_replace("[[]]", "") # Also throws error
Run Code Online (Sandbox Code Playgroud)

Chr*_*ann 2

另一个相对简单的正则表达式解决方案是:

data.frame(df) %>%
  mutate(df = gsub("\\[\\W+|\\W+\\]", "", df))
                     df
1           Mamie Smith
2 Screamin' Jay Hawkins
Run Code Online (Sandbox Code Playgroud)

在这里,我们删除任何出现一次或多次的非字母数字字符 ( \\W+),条件是该字符之前是 OR ( |) ,后跟方括号。

或者,借用 @TaerJae 但大大简化了:

library(stringr)
data.frame(df) %>%
  mutate(df = str_extract(df, '\\w.*\\w'))
Run Code Online (Sandbox Code Playgroud)

在这里,我们只关注\\w字符串两侧的字母数字字符 ( ),同时允许.*它们之间出现任何字符 ( ),从而捕获例如撇号Screamin'和空格。