提取方括号之间的最后一个子字符串

Extract last substring between square brackets

我有一列数据,我需要从中提取字母数字 string/factor 示例

Column x
[ghjg6] [fdg5] [113gi4lki] great work 
[xzswedc: acf] [xzt8] [111eerrh5] 
[asd2] [1] [113vu17hg 115er5lgr 112cgnmbh ] get out

我想把方括号[113gi4lki][111eerrh5][113vu17hg 115er5lgr 112cgnmbh]中的数据单独列出来。请指教

你可以这样做:

Column.x <- c(
"[ghjg6] [fdg5] [113gi4lki] great work",
"[xzswedc: acf] [xzt8] [111eerrh5]",
"[asd2] [1] [113vu17hg 115er5lgr 112cgnmbh ] get out")
y <- gsub(".*\[", "[", Column.x)
gsub("\].*", "]", y)

结果:

> gsub("\].*", "]", y)
[1] "[113gi4lki]"                      "[111eerrh5]"                      "[113vu17hg 115er5lgr 112cgnmbh ]"

如果需要,可以将两个步骤放在一起:

gsub("\].*", "]", gsub(".*\[", "[", Column.x))

要获取最后一组 [...] 括号内的文本,您可以使用具有以下模式的 sub

".*\[([^][]+)].*"

模式匹配:

  • .* - 任意 0+ 个字符,尽可能多,直到 last 出现后续子模式
  • \[ - 文字 [(必须在括号表达式外转义)
  • ([^][]+) - 第 1 组(稍后称为 </code>)匹配除 <code>][
  • 以外的 1 个或多个字符
  • ] - 文字 ](无需在括号表达式
  • 之外转义)
  • .* - 字符串的其余部分。

R online demo:

x <- c("[ghjg6] [fdg5] [113gi4lki] great work", "[xzswedc: acf] [xzt8] [111eerrh5]", "[asd2] [1] [113vu17hg 115er5lgr 112cgnmbh ] get out", "Some text with no brackets")
df <- data.frame(x)
df$x = sub(".*\[([^][]+)].*", "\1", df$x)
df

输出:

                               x
1                      113gi4lki
2                      111eerrh5
3 113vu17hg 115er5lgr 112cgnmbh 
4     Some text with no brackets

如果你想删除没有[...]的条目(比如我测试集中的最后一个),使用

df$x = sub(".*\[([^][]+)].*|.*", "\1", df$x)

参见 another online R demo