首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用正则表达式提取特定字符

使用正则表达式提取特定字符
EN

Stack Overflow用户
提问于 2020-09-25 03:21:07
回答 2查看 52关注 0票数 2
代码语言:javascript
复制
text <- c('d__Viruses|f__Closteroviridae|g__Closterovirus|s__Citrus_tristeza_virus',
'd__Viruses|o__Tymovirales|f__Alphaflexiviridae|g__Mandarivirus|s__Citrus_yellow_vein_clearing_virus',
'd__Viruses|o__Ortervirales|f__Retroviridae|s__Columba_palumbus_retrovirus')

我试过,但失败了:

代码语言:javascript
复制
str_extract(text, pattern = 'f.*\\|') 

我怎么才能得到

f__Closteroviridae

f__Alphaflexiviridae

f__Retroviridae

任何帮助都将是非常感谢的!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-09-25 03:23:13

使正则表达式不贪婪,并且由于您不希望"|"在最终的输出中使用积极的前瞻性。

代码语言:javascript
复制
stringr::str_extract(text, 'f.*?(?=\\|)') 
#[1] "f__Closteroviridae"   "f__Alphaflexiviridae" "f__Retroviridae"   

在基本R中,我们可以使用sub

代码语言:javascript
复制
sub('.*(f_.*?)\\|.*', '\\1', text)
#[1] "f__Closteroviridae"   "f__Alphaflexiviridae" "f__Retroviridae" 
票数 1
EN

Stack Overflow用户

发布于 2020-09-25 03:31:39

对于基本的R解决方案,我将使用regmatchesgregexpr

代码语言:javascript
复制
m <- gregexpr("\\bf__[^|]+", text)
as.character(regmatches(text, m))

[1] "f__Closteroviridae"   "f__Alphaflexiviridae" "f__Retroviridae"

如上所述,使用gregexpr的优点是,如果输入包含多个f__匹配项,我们也可以捕获它。例如:

代码语言:javascript
复制
x <- 'd__Viruses|f__Closteroviridae|g__Closterovirus|f__some_virus'
m <- gregexpr("\\bf__[^|]+", x)
regmatches(x, m)[[1]]

[1] "f__Closteroviridae" "f__some_virus" 

数据:

代码语言:javascript
复制
text <- c('d__Viruses|f__Closteroviridae|g__Closterovirus|s__Citrus_tristeza_virus',
          'd__Viruses|o__Tymovirales|f__Alphaflexiviridae|g__Mandarivirus|s__Citrus_yellow_vein_clearing_virus',
          'd__Viruses|o__Ortervirales|f__Retroviridae|s__Columba_palumbus_retrovirus')
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64057330

复制
相关文章

相似问题

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