【问题标题】:Extracting a string from the first square brackets, starting from right to left从第一个方括号中提取一个字符串,从右到左开始
【发布时间】:2019-10-07 16:38:19
【问题描述】:

我试图仅从从右到左开始的第一个方括号中提取字符串

我尝试了多种使用str_matchregexpr 的方法,但我做不到。

c<-"Sens [91] [DRCol105]_Issuer[Risk\\Issuer]"

str_match(c,"\\[.*?\\]$")

OR

start.char<-regexpr("\\[*$",c)[1]+2
stop.char<-regexpr("\\]*$",c)[1]-1
substr(c,start.char,stop.char)

我想提取最后一个方括号内的所有内容。在这个例子中,我想提取并保存在一个变量中,只有“Risk\Issuer”。

【问题讨论】:

  • 尝试str_match(c,"([^\\[]+)\\]$")[,2] - 即选择不是[ 的字符串,后跟]$。请注意,str_match 应该与捕获组 (...) 一起使用 - 不像 str_extract
  • 你好。请尽量避免使用预定义名称命名对象(或函数)。在您的情况下,c 用于连接

标签: r regex


【解决方案1】:

这是另一个使用正则表达式的解决方案

# s <- "Sens [91] [DRCol105]_Issuer[Risk\\Issuer]"

gsub('.*\\[(.*)\\]', '\\1', s, perl = TRUE)
# [1] "Risk\\Issuer"

正则表达式.*\\[(.*)\\])提取last方括号内的字符串。

或者

# s <- c("Sens [91] [DRCol105]_Issuer[Risk\\Issuer]", "123 [91]@[test] something follows")

gsub('.*\\[(.*)\\][^\\[]*', '\\1', s, perl = TRUE)
# [1] "Risk\\Issuer" "test"

如果字符串不以括号结尾,它的优点是可以工作。

【讨论】:

    【解决方案2】:

    这里有几个选项:

    tail(stringr::str_match_all(s, "\\[(.*?)\\]")[[1]][, 2], 1)
    #[1] "Risk\\Issuer"
    

    使用相同的正则表达式

    stringi::stri_extract_last_regex(s, "\\[(.*?)\\]")
    #[1] "[Risk\\Issuer]"
    

    或者去掉括号

    gsub("\\[|\\]", "", stringi::stri_extract_last_regex(s, "\\[(.*?)\\]"))
    #[1] "Risk\\Issuer"
    

    【讨论】:

      【解决方案3】:

      我已将字符串名称更改为 s,因为 c 是基本 R 函数名称。

      s <- "Sens [91] [DRCol105]_Issuer[Risk\\Issuer]"
      
      sub("^.*(\\[.*?\\]$)", "\\1", s)
      #[1] "[Risk\\Issuer]"
      

      或者,如果你想删除括号:

      sub("^.*\\[(.*?)\\]$", "\\1", s)
      #[1] "Risk\\Issuer"
      

      【讨论】:

        【解决方案4】:

        这是strsplit 方法,

        tail(strsplit(x, '[', fixed = TRUE)[[1]], 1)
        [1] "Risk\\Issuer]"
        
        #or If you don't want the last bracket,
        
        sub(']', '', tail(strsplit(x, '[', fixed = TRUE)[[1]], 1))
        [1] "Risk\\Issuer"
        

        【讨论】:

          猜你喜欢
          • 2021-05-02
          • 1970-01-01
          • 1970-01-01
          • 2019-07-29
          • 1970-01-01
          • 2023-03-29
          • 2015-01-27
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多