[英]Get everything between the first character '<' and the last character of '>'
[英]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.