Java грамотный текст, разбор слова регулярное выражение - PullRequest
1 голос
/ 29 апреля 2011

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

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

Любые идеи?

Ответы [ 2 ]

1 голос
/ 29 апреля 2011

А как же

\b[A-Z]?[a-z]*x\b

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

0 голосов
/ 29 апреля 2011

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

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) );
}

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...