Регулярное выражение с исключением в R - PullRequest
2 голосов
/ 26 сентября 2019

У меня есть регулярное выражение .*(?<=code=)(.*?)(;|$).*, которое позволяет мне извлекать определенный шаблон («код») из списка.Но всякий раз, когда предполагаемый шаблон («код») отсутствует в конкретной строке, в результате появляется вся строка.

Dateset:

rev=63;code=ATL;qty=1;zip=45987
rev=10.60|34;qty=1|2;zip=12686|12694;code=NY
rev=12;qty=7;zip=71565
rev=1.6|4;qty=4|2;zip=4548|464;code=KT
rev=8;qty=1;zip=74268
rev=3|24|8;qty=1|6|3;code=TPA;zip=33684|36842|30254

Токовый выход (с подстановкой \ 1 ):

ATL
NY
rev=12;qty=7;zip=71565
KT
rev=8;qty=1;zip=74268
TPA

Предполагаемый результат:

ATL
NY

KT

TPA

1 Ответ

1 голос
/ 26 сентября 2019

Вы можете извлечь данные, используя stringr::str_extract:

x <- c("rev=63;code=ATL;qty=1;zip=45987","rev=10.60|34;qty=1|2;zip=12686|12694;code=NY","rev=12;qty=7;zip=71565","rev=1.6|4;qty=4|2;zip=4548|464;code=KT","rev=8;qty=1;zip=74268","rev=3|24|8;qty=1|6|3;code=TPA;zip=33684|36842|30254")
library(stringr)
str_extract(x, "(?<=\\bcode=)[^;]+")
# => [1] "ATL" "NY"  NA    "KT"  NA    "TPA"

Если вы не хотите NA и хотите пустые элементы, используйте

matches <- str_extract(x, "(?<=\\bcode=)[^;]+")
matches[is.na(matches)] <- ""
matches
## => [1] "ATL" "NY"  ""    "KT"  ""    "TPA"

Шаблон соответствует:

  • (?<=\bcode=) - положительный вид сзади , соответствующий местоположению, которому непосредственно предшествует целое слово code и =
  • [^;]+ - a Отрицательный класс символов , который соответствует и потребляет (т.е. добавляет к выводу и перемещает индекс регулярного выражения) 1 или более символов, отличных от ;.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...