R 将字符串从目标字符串的开头提取为字符
我有一个目标字符串:R 将字符串从目标字符串的开头提取为字符,r,regex,string,R,Regex,String,我有一个目标字符串: Target_string <- "aaa" Target\u string我建议将lappy()与strsplit()一起使用,然后连接结果。您必须创建一个列表来保存匹配结果。此外,可以在lappy()中定义的函数内使用grepl()检查匹配。最后,您可以使用do.call()收集所有结果,使用c()函数在L列表上创建一个向量: #Data Target_string <- "aaa" String <- c(&
Target_string <- "aaa"
Target\u string我建议将lappy()
与strsplit()
一起使用,然后连接结果。您必须创建一个列表来保存匹配结果。此外,可以在lappy()
中定义的函数内使用grepl()
检查匹配。最后,您可以使用do.call()
收集所有结果,使用c()
函数在L
列表上创建一个向量:
#Data
Target_string <- "aaa"
String <- c("bb|aaa_123|ccc","aaa234|bbb|NA|NA","bbb|ccc|aaab452|ddd|NA|NA")
#Split and check
L <- lapply(strsplit(String,split='|', fixed=TRUE),function(x) x[grepl(pattern = Target_string,x = x)])
#Bind
do.call(c,L)
使用str\u extract
:
stringr::str_extract(String, paste0(Target_string, '.*?(?=\\|)'))
#[1] "aaa_123" "aaa234" "aaab452"
其中,要提取的模式为:
paste0(Target_string, '.*?(?=\\|)')
#[1] "aaa.*?(?=\\|)"
在base R中,您可以通过以下方式执行此操作:
sub(paste0('.*(', Target_string, '.*?)\\|.*'), '\\1', String)
这里的模式是:
paste0('.*(', Target_string, '.*?)\\|.*')
#[1] ".*(aaa.*?)\\|.*"
aaa[^ |]*
要匹配0+倍除管道以外的任何字符,这非常有用。感谢Ronak,这非常有用。我需要花更多的时间理解正则表达式的语法!
paste0(Target_string, '.*?(?=\\|)')
#[1] "aaa.*?(?=\\|)"
sub(paste0('.*(', Target_string, '.*?)\\|.*'), '\\1', String)
paste0('.*(', Target_string, '.*?)\\|.*')
#[1] ".*(aaa.*?)\\|.*"