我有一列数据,我需要从中提取字母数字字符串/因子示例
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(后称\1
))与]
和[
以外的1个或更多字符匹配。]
-文字]
(无需在方括号表达式中转义).*
-字符串的其余部分。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)