Регулярное выражение для разбора текстовых слов на языке Java

#java #regex #parsing

#java #регулярное выражение #синтаксический анализ

Вопрос:

Сначала я был доволен [A-Za-z] Теперь мне нужно разобрать слова, которые заканчиваются буквой «s», но я должен пропустить слова, которые содержат 2 или более первых букв в верхнем регистре.
Я пробую что-то вроде [n\ ][A-Za-z]{0,1}[a-z]*s[ \.\,\?\!\:] , но в первой части этого [n\ ] по какой-то причине не отображается начало строки.

вот пример,
текст такой : Денис ходит в школу каждый день!
но единственное проанализированное слово — goeS

Есть идеи?

Комментарии:

1. I need to parse words that end with the letter "x" Как goeS туда вписывается?

Ответ №1:

Как насчет

 b[A-Z]?[a-z]*xb
  

b — это граница слова, я предполагаю, что это то, что вы хотели. ? является более короткой формой {0,1}

Ответ №2:

Попробуй это:

 Pattern p = Pattern.compile("\b([A-Z]?[a-z]*[sS])\b");
Matcher m = p.matcher("Denis goeS to school every day!");
while(m.find())
{
  System.out.println( m.group(1) );
}
  

Регулярное выражение соответствует каждому слову, которое начинается с чего угодно, кроме пробела или двух символов верхнего регистра, содержит только символы нижнего регистра в середине и заканчивается либо на s, либо S.

В вашем примере это соответствовало бы Denis и goeS . Если вы хотите использовать только заглавные буквы, измените выражение на, "\b([A-Z]?[a-z]*[S])\b" которое будет соответствовать goeS и GoeS , но не GOeS , gOeS или goES .

Комментарии:

1. Спасибо! Такой полный ответ!