input1="caused/VBN by/IN thyroid disorder"
Требование: найдите слово "caused"
, за которым следует косая черта, за которым следует любое количество прописных алфавитов, а не пробел + "by/IN
.
В вышеприведенном примере за "caused/VBN"
следует " by/IN"
, поэтому «вызвано» не должно совпадать.
input2="caused/VBN thyroid disorder"
"by/IN"
не соответствует вызванному, поэтому должно соответствовать
regex="caused/[A-Z]+(?![\\s]+by/IN)"
caused/[A-Z]+
- слово «вызвало» + / + одна или несколько заглавных букв
(?![\\s]+by)
- отрицательный взгляд - не соответствует пробелу и
Ниже приведен простой метод, который я использовал для проверки
public static void main(String[] args){
String input = "caused/VBN by/IN thyroid disorder";
String regex = "caused/[A-Z]+(?![\\s]+by/IN)";
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(input);
while(matcher.find()){
System.out.println(matcher.group());
}
Вывод: caused/VB
Я не понимаю, почему мое отрицательное регулярное выражение не работает.