我正在尝试仅从右到左开始的第一个方括号中提取字符串
我尝试使用str_match
和regexpr
的多种方法,但我做不到。
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”并将其保存在变量中。
答案 0 :(得分:3)
这是使用正则表达式的另一种解决方案
# 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"
如果字符串不以方括号结尾,则具有工作优势。
答案 1 :(得分:2)
我已将字符串名称更改为s
,因为c
是基本的R函数名称。
s <- "Sens [91] [DRCol105]_Issuer[Risk\\Issuer]"
sub("^.*(\\[.*?\\]$)", "\\1", s)
#[1] "[Risk\\Issuer]"
或者,如果要删除括号:
sub("^.*\\[(.*?)\\]$", "\\1", s)
#[1] "Risk\\Issuer"
答案 2 :(得分: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 :(得分:1)
这是一种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"