(Извините за мою предыдущую ошибку. Мозг теперь твердо задействован. Э-э, вероятно.)
Это работает:
String rex = "^\\d+\\.\\s\\p{Lu}+.*";
System.out.println("1. PTYU fmmflksfkslfsm".matches(rex));
// true
System.out.println(". PTYU fmmflksfkslfsm".matches(rex));
// false, missing leading digit
System.out.println("1.PTYU fmmflksfkslfsm".matches(rex));
// false, missing space after .
System.out.println("1. xPTYU fmmflksfkslfsm".matches(rex));
// false, lower case letter before the upper case letters
Разбивка:
^
= начало строки
\d+
= Одна или несколько цифр (\
экранируется, потому что он в строке, следовательно \\
)
\.
= Литерал .
(или ваш оригинал [.]
в порядке) (опять же, экранированный в строке)
\s
= Один символ пробела (нет необходимости в {1}
после него) (я перестану упоминать о побегах)
\p{Lu}+
= Одна или несколько заглавных букв (используя правильный escape-код Unicode & mdash; спасибо, tchrist, за указание на это в вашем комментарии ниже . В английских терминах эквивалент будет [A-Z]+
)
.*
= Все остальное
Подробнее см. в документации .
В конце вам нужно только .*
, если вы используете метод, подобный String#match
(выше), который будет пытаться сопоставить всю строку .