R 提取方括号之间的最后一个子字符串
我有一列数据,需要从中提取一个alphnumeric字符串/因子示例R 提取方括号之间的最后一个子字符串,r,regex,rselenium,R,Regex,Rselenium,我有一列数据,需要从中提取一个alphnumeric字符串/因子示例 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
[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("\\].*", "]", gsub(".*\\[", "[", Column.x))
你可以做:
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("\\].*", "]", gsub(".*\\[", "[", Column.x))
要获取最后一组
[…]
括号内的文本,可以使用具有以下模式的子
:
".*\\[([^][]+)].*"
模式匹配:
-在后续子模式的最后一次出现之前,任何0+字符都会贪婪地、尽可能多地保留*
-文本\\[
(必须在括号表达式之外转义)[
-第1组(后面称为([^][]+)
)匹配除\1
和]
[
-文本]
(无需在括号表达式外转义它]
-字符串的其余部分*
[…]
的条目(如我的测试集中的最后一个条目),请使用
请参阅。要获取最后一组
[…]
括号内的文本,您可以使用具有以下模式的子
:
".*\\[([^][]+)].*"
模式匹配:
-在后续子模式的最后一次出现之前,任何0+字符都会贪婪地、尽可能多地保留*
-文本\\[
(必须在括号表达式之外转义)[
-第1组(后面称为([^][]+)
)匹配除\1
和]
[
-文本]
(无需在括号表达式外转义它]
-字符串的其余部分*
[…]
的条目(如我的测试集中的最后一个条目),请使用
请参阅。您尝试了什么?请显示针对此特定问题的代码,并解释您在哪里使用stuckI-Treaded-library(stringr)stru-extract(str1,“\[(\\w+\\s+{2,}\\w+\]))我的初始代码打开一个链接并读取一个html表。从中我提取了一列,其中包含如上所示的数据,我想提取上面所示的数据以供进一步计算。@jogo感谢您提供的链接您尝试了什么?请显示您针对此特定问题的代码,并解释您在哪里使用stuckI Tested library(stringr)str\u摘录(str1,“\[(\\w+\\s+{2,}\\w+\]”)我的初始代码打开一个链接并读取一个html表。从那里我获取了一列,其中包含如上所示的数据,我想提取上面所示的数据以供进一步计算。@jogo感谢您提供的链接Hanks这很好,我可以直接对长度为25的数据帧执行此操作吗?我是如何在该列上执行此操作的?谢谢,它只是缺少一行或两行拉错了字符串。对于数据帧,您可以执行
df[]感谢这项工作非常好,我可以直接对长度为25的数据帧执行此操作吗,以及如何对列执行此操作感谢,只是缺少一行或两行拉错了字符串。对于数据帧,您可以执行df[]Stribizew感谢您提供上述脚本。我还提出了类似于str_extract(df$Subject,“[:punct:+([:digit:+[:alpha:+])+[:punct:])的其他内容->df$x2
提供了90%的正确数据,但是如果您的代码行给我剩余的10%,那么您的代码行将提供90%的正确数据。如果我将这两行都用作df$x2列1,并将脚本的输出用作列2,那么我将在列2中获得一些垃圾数据。我现在有两件事要做:1.同时使用代码和合并,这两行将丢弃垃圾数据,并为我提供100%的needed数据2.尝试在我的脚本格式中为您的代码寻找类似的语法。`Thestr_extract(df$Subject,“[:punt:][+([:digit:][+[:alpha:][+)+[:punct:”
是错误的。您需要在括号表达式中使用POSIX字符类。此外,我猜通过使用[[:digit:]+[:alpha:]+
您想要匹配字母数字?然后使用[[:alnum:]
并将[[:putt:]
部分变成lookaheads(或者-如果您只有[…]
,请使用\\[
和]
)。请尝试str_提取(df$Subject,“(?@kishore:请再次解释规则。请修改您的问题并进行相应编辑,因为现在还不清楚要求是什么。@Wiktor Stribiżew,我们可以聊天吗,我可以解释清楚吗?@kishore尝试在此处添加更多消息。Stribizew感谢您的上述脚本。我还想出了类似于 str_extract(df$Subject,“[:punct:][+([:digit:][+[:alpha:][+)+[:punct:]”)->df$x2
提供了90%的正确数据,但是如果您的代码行给我剩余的10%,那么您的代码行将提供90%的正确数据。如果我将这两行都用作df$x2列1,并将脚本的输出用作列2,那么我将在列2中获得一些垃圾数据。我现在有两件事要做:1.同时使用代码和合并,这两行将丢弃垃圾数据,并为我提供100%的needed数据2.尝试在我的脚本格式中为您的代码寻找类似的语法。`Thestr_extract(df$Subject,“[:punt:][+([:digit:][+[:alpha:][+)+[:punct:”
是错误的。您需要在括号表达式中使用POSIX字符类。此外,我猜通过使用[[:digit:]+[:alpha:]+
您想要匹配字母数字?然后使用[[:alnum:]
并将[[:putt:]
部分变成lookaheads(或者-如果您只有[…]
,请使用\\[
和]
)。请尝试str_extract(df$Subject,”(?@kishore:请再次解释规则。请修改您的问题并进行相应编辑,因为现在已经不清楚要求是什么。@Wiktor Stribiżew,我们可以聊天吗,我可以
df$x = sub(".*\\[([^][]+)].*|.*", "\\1", df$x)