Возможно, это легко, но я не смог найти решение.Регулярное выражение в sas, не соответствующее слову после соответствующего слова
Я работаю в Sas 9.3 с регулярным выражением. Я ищу регулярное выражение, которое соответствует только некоторым словам, за которыми не следует определенное другое слово. Например, он должен соответствовать всему тексту, где у вас есть «автомобиль», а во всем остальном тексте после этого не должно быть «нет». (Дело может быть проигнорировано, потому что я UPCASE все в моем коде)
должны соответствовать
Это не автомобиль я хочу
Автомобиль зеленый
не должны совпадать
Автомобиль не является зеленым
Это автомобиль я хочу, но его нет в наличии
Одно решение было бы разделить его на два матча:
prxmatch("/The car/",mytext) > 0 and prxmatch("/The car.+not/",mytext)=0
Но я должен использовать логику много раз, также в более сложных случаях, поэтому я не хочу всегда использовать 2 prxmatch и вместо этого комбинировать логику в одном prxmatch.
Я много читал о просмотровых aheads и попробовал несколько примеров, но они не работали правильно, например:
"/The Car.+[^(not)]/"
или
"/The Car.+(?!not)/"
или
"/^(?!.*not.*).*?The car.*$/"
первого и второй возвращает все 4 текста в качестве результатов, третье - результат вообще.
Так может ли кто-нибудь предоставить мне решение для этого, просто не оператор для слова или правильный взгляд вперед/за подходом?
Как [ '^ (= * \ B Неправильно автомобиль \ б (я?)?. (?!. * \ BNOT \ б)). * '] (https://regex101.com/r/pT0mP7/1)? Или ['(? I) ^. * \ Bthe car \ b (?!. * \ Bnot \ b). *'] (Https://regex101.com/r/pT0mP7/2) –
@Wiktor Stribiżew: Что делает ли (? im)? Ваш первый пример Возвращает ошибку, ваша вторая, похоже, работает, но только если я добавлю (? Im) при запуске. Итак, благодарю вас, но, возможно, вы можете объяснить мне, как это работает – kl78
У вас есть многострочный ввод строки? Если да, то я понимаю, почему работает '(? M)'. '(? i)' является модификатором без учета регистра, а '(? m)' является многострочным модификатором, создающим '^' совпадение в начале строки, а не начало всей строки. Итак, '' /^.* \ theb \ b (?!. * \ Bnot \ b). */Im "' должен работать. Если да, я отправлю. –