【发布时间】:2017-04-26 04:15:23
【问题描述】:
我正在尝试使用 tidyr::extract() 从表中提取具有多个键:值对的列。我已经使用 stringr::str_view() 微调了我的正则表达式,但我遇到了意外的行为 - tidyr::extract() 似乎匹配的字符串与 stringr::str_view() 不同。
如何修改对 tidyr::extract() 的使用以获得我想要的行为?
示例:
library(tidyverse)
library(stringr)
df <- as_data_frame('protein_id "ENSP00000260585.7"; tag "basic"; tag "appris_principal"; tag "CCDS"; tag "seleno"; ccdsid "CCDS46240.1"; havana_gene "OTTHUMG00000151931.3"; havana_transcript "OTTHUMT00000324484.3";')
# match I expect: 'tag "basic"; tag "appris_principal"; tag "CCDS"; tag "seleno"; '
str_view(df$value, '(tag "(?:.+?)"; +)+')
# match I get: 'tag \"seleno\"; '
(df %>% extract(value, "tags", '(tag "(?:.+?)"; +)+', remove = FALSE))$tags
我想将这组 4 个标签 key:values 提取到一个名为 tags 的新列中,然后我将对其进行更多整理。但是,当我只从提取物中得到 4 对中的 1 对时,这很难!
我认为我上面的 cmets 很清楚,但为了以防万一翻译我的正则表达式来描述我的意图有帮助,我将其解释为:我想匹配 0 个或多个重复的 'tag "(0 个或更多chars, 惰性求值)";(可选空格)'(贪婪求值)。
【问题讨论】: