Для захвата сообщения от персонажа после указания c текстов - PullRequest
1 голос
/ 12 февраля 2020

У меня есть следующий символ в R. Есть ли способ заполнять только текст, следующий после [SQ].

Ввод

df   # df is a character
[1] "[Mi][OD][SQ]Nice message1."                        
[2] "[Mi][OD][SQ]Nice message2."                         
[3] "[RO] ERROR: Could not SQLExecDirect 'SELECT * FROM "

Ожидаемый вывод

df
[1] Nice message1. Nice message2

В случае, если есть [SQ], как показано ниже

df   # df is a character
[1] "[Mi][OD][SQ]Nice message1."                        
[2] "[Mi][OD][SQ]Nice message2."                         
[3] "[RO] ERROR: Could not SQLExecDirect 'SELECT * FROM "
[4] "[Mi][OD][SQ]Nice message3."   

Ожидаемый вывод

df
[1] Nice message1. Nice message2. Nice message3

1 Ответ

1 голос
/ 12 февраля 2020

Можно использовать str_extract для извлечения подстроки, а затем обернуть na.omit, чтобы удалить элементы NA, которые появляются, когда нет совпадения для строки. Здесь мы используем обход регулярных выражений для проверки шаблона [SQ], который предшествует другим символам, для извлечения тех символов, которые следуют за ним

library(stringr)
as.vector(na.omit( str_extract(df, "(?<=\\[SQ\\]).*")))
#[1] "Nice message1" "Nice message2" "Nice message3"

Если это должна быть одна строка, то str_c для свертывания строки

str_c(na.omit( str_extract(df,  "(?<=\\[SQ\\]).*")), collapse = '. ')
#[1] "Nice message1. Nice message2. Nice message3"

данные

df <- c("[Mi][OD][SQ]Nice message1.", "[Mi][OD][SQ]Nice message2.", 
"[RO] ERROR: Could not SQLExecDirect 'SELECT * FROM ", "[Mi][OD][SQ]Nice message3."
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...