如何提取方括号

时间:2017-05-23 06:35:18

标签: r regex rselenium

我有一列数据,我需要从中提取一个字母数字字符串/因子示例

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

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

2 个答案:

答案 0 :(得分:2)

你可以这样做:

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))

答案 1 :(得分:0)

要获取最后一组[...]括号内的文字,您可以使用sub,其格式如下:

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

模式匹配:

  • .* - 尽可能多地使用0 +字符,直到后续子模式的 last 出现
  • \\[ - 文字[(必须在括号表达式之外转义)
  • ([^][]+) - 第1组(后面称为\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