Нахождение индекса после сопоставления подстроки в R - PullRequest
0 голосов
/ 02 сентября 2018

Я использую команду grep для проверки наличия строки в списке.

a <- list("IK" , "IK /// CHGB ", "IKM" ,"HGIKGF", "IK2" ,"IK2FGH" )

Я пытаюсь получить индекс строк, которые содержат подстроку "IK", используя grep

grep("IK",a) 

дает

[1] 1 2 3 4 5 6

Я хотел бы получить индекс строк, которые содержат только «IK» или «IK», за которыми следует один символ или они разделены /// например, "IK /// CHGB" , "IK2" and "IKM". Я не собираюсь выводить индекс строки вроде "HGIKGF" or "IKHGFTR /// BN".

Желаемый вывод

[1] 1 2 3 5

Я бы хотел попросить совета, как это можно сделать.

Edit1: Обратите внимание, строка, которую я соответствую "IK", хранится в списке.

Matchfor <- list("IK","UK")
for(j in 1:length(Matchfor){
grep(Matchfor[j],a)
}

1 Ответ

0 голосов
/ 02 сентября 2018

Немного расширив ваш контрольный пример a, включив в него пример "UK.

a <- list("IK" , "IK /// CHGB ", "IKM" ,"HGIKGF", "IK2" ,"IK2FGH", "UK")
Matchfor <- c("IK","UK")
MatchPat <- paste0(Matchfor, "\\w?\\b")
lapply(MatchPat, grep, a) 
[[1]]
[1] 1 2 3 5

[[2]]
[1] 7

Немного пояснения: \\w? опционально допускает один символ после основного шаблона (IK или UK). \\b обозначает границу слова - несловесный символ или конец строки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...