首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >stringr::str_view()和tidyr::提取()正则表达式的差异?

stringr::str_view()和tidyr::提取()正则表达式的差异?
EN

Stack Overflow用户
提问于 2017-04-26 04:15:23
回答 1查看 157关注 0票数 0

我正在尝试从一个具有tidyr:: extract ()的表中提取一个具有多个键:值对的列。我已经用stringr::str_view()对我的正则表达式进行了微调,但我得到了意想不到的行为--tidyr::提取()似乎与stringr::str_view()匹配不同的字符串。

如何修改tidyr::提取()的用法以获得我想要的行为?

示例:

代码语言:javascript
复制
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标记键的集合:值提取到一个名为标记的新列中,然后再整理一些。但是,当我从摘录中得到4对中的1对时,这是很难的!

我认为上面的评论很清楚,但是为了避免翻译我的正则表达式来描述我的意图,我把它解释为:我想匹配'tag“的0或更多的重复(0或更多字符,懒惰的评估)”;(可选的空格)‘(贪婪的评估)。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-04-26 05:10:33

啊--这与贪婪与懒惰有关,而提取()“将每个捕获组变成一个新列”。所以我只需要一个捕获组:

代码语言:javascript
复制
> (df %>% extract(value, "tags", '((?:tag "(?:.+?)"; +)+)', remove = FALSE))$tags

[1] "tag \"basic\"; tag \"appris_principal\"; tag \"CCDS\"; tag \"seleno\"; "

正则表达式..。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43624935

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档