R中的正则表达式表达式,因此仅适用于每个字符串中首次出现特定字符的情况?

问题描述 投票:0回答:1

我有一个用字符串填充的列表:string<- c("SPG_L_subgenual_ACC_R", "SPG_R_MTG_L_pole", "MTG_L_pole_CerebellumGM_L")

我需要分割字符串,使它们看起来像:

"SPG_L", "subgenual_ACC_R", "SPG_R", "MTG_L_pole", "MTG_L_pole", "CerebellumGM_L"

我尝试使用以下正则表达式来分割字符串:

str_split(string,'(?<=[[RL]|pole])_')

但这导致:

"SPG_L", "subgenual" "ACC_R", "SPG_R", "MTG_L", "pole", "MTG_L", "pole", "CerebellumGM_L"

我如何编辑正则表达式,以便在第一次出现“ R”,“ L”之后在“ _”处拆分每个字符串元素,除非第一次出现“ R”或“ L”之后是“ pole” ,那么它将在第一次出现“ pole”之后拆分字符串元素,并且仅拆分每个字符串元素一次?

r regex strsplit
1个回答
0
投票
split_again = function(x){
  if(length(x) > 1){
    return(x)
  }
  else{
    str_split(
      string = x,
      pattern = '(?<=[R|L])_', 
      n = 2)
  }
}
str_split(
  string = string,
  pattern = '(?<=pole)_', 
  n = 2) %>% 
  lapply(split_again) %>% 
  unlist()
© www.soinside.com 2019 - 2024. All rights reserved.