繁体   English   中英

R中的正则表达式可匹配某个指定字符的第一次出现和最后一次出现之间的所有内容

[英]Regexp in R to match everything in between first and last occurene of some specified character

我想匹配第一个和最后一个下划线之间的所有内容。 我用R 到目前为止,我所拥有的是:

p.subject <- c('bla_bla', 'bla', 'bla_bla_bla', 'bla_bla_bla_bla')
sub('[^_]*_(.*)_[^_]*', x = p.subject, replacement = '\\1', perl = T)

其中“ bla”是除下划线以外的任何字符...

我想要的结果将是这样的:

c(NA, NA, bla, bla_bla)

我想不通! 为什么第一个模式匹配? 这不应该是因为模式必须有2个下划线! 还是我必须使用某种超前表达?

非常欢迎您的帮助!

您可以使用gsub

vec <- gsub("(^[^_]+)_?|_?([^_]+$)", "", p.subject)
vec <- ifelse(nchar(vec) == 0 , NA, vec)
vec
[1] NA        NA        "bla"     "bla_bla"

资料

dput(p.subject)
c("bla_bla", "bla", "bla_bla_bla", "bla_bla_bla_bla")

这是使用str_extract另一个选项。 我们使用正则表达式环顾四周来提取指定字符( _的第一次出现和最后一次出现之间的模式。

library(stringr)
str_extract(p.subject, "(?<=[^_]{1,30}_).*(?=_[^_]+)")
#[1] NA        NA        "bla"     "bla_bla"

注意:我们没有使用ifelse

数据

p.subject <- c('bla_bla', 'bla', 'bla_bla_bla', 'bla_bla_bla_bla')

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM