#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. Спасибо! Такой полный ответ!