提取方括号之间的最后一个子字符串
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 个或多个字符
]
- 文字 ]
(无需在括号表达式 之外转义)
.*
- 字符串的其余部分。
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)
我有一列数据,我需要从中提取字母数字 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 个或多个字符
]
- 文字]
(无需在括号表达式 之外转义)
.*
- 字符串的其余部分。
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)