#java #regex #text
#java #регулярное выражение #текст
Вопрос:
У меня есть шаблон
\bi\b[^.!?]{0,10}\bhate
которое соответствует строке только в одном предложении (не разделенном на .!?
). Но это также соответствует противоположному смыслу с not
между двумя словами. Как исключить такие случаи not
между двумя словами с максимальным расстоянием 10 между ними.
Теперь оно соответствует: i do not hate
. Я хотел бы исключить это и оставить только такие совпадения, как i do hate
или i hate
.
Комментарии:
1. Это
[^.!?]{0,10}
должно быть между{1,10}
2.
bib(?:(?!bnotb)[^.!?]){1,10}bhateb
, демонстрация .
Ответ №1:
Вы бы исключили not в отрицательном утверждении,
адаптированном к длине NOT в пределах первых 10 символов.
Т.е. диапазон составляет 10 - length('not')
или {0,7}
bib(?!.{0,7}not)[^.!?]{0,10}bhate
https://regex101.com/r/vdqBQX/1
b i b # 'i'
(?! .{0,7} not ) # Here, exclude 'not' if within the first 7 characters
[^.!?]{0,10} b # O - 10 characters within this negated class
hate
Комментарии:
1. спасибо за такие подробности, но длина в 3 цифры здесь для меня не так уж важна. Просто нужно исключить отрицание
2. @SergeyAleshkinAlyoshkin — Я не придал слишком большого значения длине
'not'
? Извините, но вы придали большое значение длине между словамиbetween two words with maximum distance 10 between them
. Возможно, вас не так сильно волнует длина между словами. Я думаю, вы могли бы просто сделать^i (?!.*not).*hate$