Извлечение строки из первых квадратных скобок, начиная справа налево - PullRequest
3 голосов
/ 21 мая 2019

Я пытаюсь извлечь строку только из первых квадратных скобок, начиная справа налево

Я пробовал несколько подходов, используя 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».

Ответы [ 4 ]

3 голосов
/ 21 мая 2019

Вот еще одно решение с использованием регулярных выражений

# 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 голосов
/ 21 мая 2019

Вот несколько вариантов:

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"
2 голосов
/ 21 мая 2019

Я изменил имя строки на s, поскольку c - это имя базовой функции R.

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

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

Или, если вы хотите снять скобки:

sub("^.*\\[(.*?)\\]$", "\\1", s)
#[1] "Risk\\Issuer"
1 голос
/ 21 мая 2019

Вот подход 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"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...