我有一列数据,我需要从中提取一个字母数字字符串/因子示例
Column x
[ghjg6] [fdg5] [113gi4lki] great work
[xzswedc: acf] [xzt8] [111eerrh5]
[asd2] [1] [113vu17hg 115er5lgr 112cgnmbh ] get out
我想在方括号[113gi4lki]
,[111eerrh5]
和[113vu17hg 115er5lgr 112cgnmbh]
的单独列中获取数据。请指教。
答案 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
)匹配除]
和[
以外的一个或多个字符]
- 文字]
(无需在括号表达式之外转义.*
- 字符串的其余部分。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)