r语言 - 删除字符串中的末尾括号



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

样本数据:

df <- c("['Mamie Smith']", "["Screamin' Jay Hawkins"]")

预期结果:

"Mamie Smith", "Screamin' Jay Hawkins"

我已经试过了:

gsub("[[]]", "", df) # Throws error
df %>%
str_replace("[[]]", "") # Also throws error

在base R中,我们可以使用trimws函数:

如果我们对非单词部分不感兴趣:

trimws(df, whitespace = "\W+")
[1] "Mamie Smith"           "Screamin' Jay Hawkins"

但是如果我们只对删除方括号和引号而留下其他标点符号,空格等感兴趣,那么:

trimws(df, whitespace = "[\]\["']+")
[1] "Mamie Smith"           "Screamin' Jay Hawkins"

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

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

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

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

library(stringr)
data.frame(df) %>%
mutate(df = str_extract(df, '\w.*\w'))

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

Base R:

sapply(regmatches(df, regexec('(\w.*)(.*\w)', df)), "[", 1)
[1] "Mamie Smith"           "Screamin' Jay Hawkins"

我们可以使用stringr包中的str_extract和以下正则表达式:

library(stringr)
str_extract(df, '(\w.*)(.*\w)')
[1] "Mamie Smith"           "Screamin' Jay Hawkins"

要将方括号与相应的引号类型配对,可以使用:

[(["'])(.*?)1]

  • [匹配[
  • (["'])Capture组1,捕获"'
  • (.*?)Capturegroup 2,匹配尽可能少的字符
  • 1对组1的反向引用以匹配相同类型的引用
  • ]匹配]

在替换中使用\2

捕获组2的值Regex demo | R demo

df <- c("['Mamie Smith']", "["Screamin' Jay Hawkins"]")
gsub("\[(["'])(.*?)\1]", "\2", df)

输出
[1] "Mamie Smith"           "Screamin' Jay Hawkins"

由于[,]"是特殊字符,您需要用双反斜杠'转义'\

Alt代码:

gsub('\"|\[|\]', "", df)

当在[]中查找]时,它需要放在首位[]]或在其他地方转义。在"["]"'["]'内部使用时,用于字符串的引号需要转义。在示例字符串中没有斜杠(这里它们只是转义")。

gsub("[]['"]", "", df)
#[1] "Mamie Smith"          "Screamin Jay Hawkins"

避免转义"'的另一个选择是使用原始字符常量r"(...)"

gsub(r"([]["'])", "", df)
#[1] "Mamie Smith"          "Screamin Jay Hawkins"

要将搜索限制在边界^(开始)和$(结束)需要给定。

gsub("^[]['"]*|[]['"]*$", "", df)
#[1] "Mamie Smith"           "Screamin' Jay Hawkins"

trimws都可以。

trimws(df, "both", "[]['"]")
#[1] "Mamie Smith"           "Screamin' Jay Hawkins"

相关内容

  • 没有找到相关文章

最新更新