Я пытаюсь написать регулярное выражение, соответствующий шаблон которого исключает определенные строки. Он должен удалять все вхождения только числа и буквенно-цифровых строк, а также удалять все знаки препинания, но содержать определенные значимые строки (911, K-12, K9, E-COMMERCE и т. Д.).Регулярное выражение с отрицательным lookahead
Я решил, что мне нужно использовать отрицательный lookahead и указать, что нужно пропустить. Соответствующий шаблон работает почти по мере необходимости, но есть пара, для которой она не работает. Ниже приведен код и результаты сопоставления. Есть пара, для которой я указал, что должно быть результатом. Те, которые я не могу понять, это строка с комбинацией пунктуаций, чисел и символов. Любая помощь приветствуется. Благодарю.
blah <- c('ASDF911 2346', 'E-COMMERCE', 'AMAZON E-COMMERCE', 'K-12 89752 911', '65426 -', 'TEACHERK-12', 'K9 OFFICER', 'WORK - K-9564', 'DEVELOPER C++', ' C+ C +5', 'DEFAULT - 456')
gsub('(^|)(?!(911|E[-]COMMERCE|K[-]12|C[+]{1,2}))([[:punct:]]|[0-9]+|([0-9]+[A-Z]+|[A-Z]+[0-9]+)[0-9A-Z]*)', ' ', blah, perl = TRUE)
" " # OK
"E-COMMERCE" # OK
"AMAZON E-COMMERCE" # OK
"K-12 911" # OK
" " # OK
"TEACHERK-12" # this should be " "
"K9 OFFICER" # OK
"WORK K-9564" # this should be "WORK "
"DEVELOPER C++" # OK
" C+ C 5" # this should be " C+ C "
"DEFAULT " # OK
У меня трудное время следующей вашей логике здесь. Почему '' C + C 5 "' не '" C + C "и' "TEACHERK-12" 'не' 'TEACHERK" '? –
@TylerRinker Я согласен с вашей логикой для «C + C» и изменил свой вопрос. Что касается «TEACHERK-12», я консервативен. Это может быть «ABCK-12», и тогда это было бы бессмысленно, чего я не знал бы в большом наборе данных, который я не могу прочитать. На данный момент я считаю буквенно-цифровые строки с/или без/пунктуации бессмысленными. – vatodorov