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

问题描述 投票:0回答:2

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

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

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

r regex rselenium
2个回答
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))

0
投票

要获得最后一组[...]中的文本,可以使用以下格式的sub

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

模式匹配:

  • [.*-尽可能贪婪的任意0+个字符,直至后续子模式的last出现]
  • [\\[-文字[(必须在方括号表达式之外转义)]
  • [([^][]+)-组1(后称\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

© www.soinside.com 2019 - 2024. All rights reserved.