Соответствие регулярного выражения Java

Мне нужно совместить, когда строка начинается с номера, затем следует точка, затем одно место и 1 или более символов верхнего регистра. Сопоставление должно происходить в начале строки. У меня есть следующая строка.

1. PTYU fmmflksfkslfsm

Регулярное выражение, которое я пробовал,:

^\d+[.]\s{1}[A-Z]+

И это не соответствует. Каким будет рабочее регулярное выражение для этой проблемы?

Ответ 1

(Извините за мою предыдущую ошибку. Мозг теперь крепко занят. Er, возможно.)

Это работает:

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= Один пробел char (после него не нужно {1}) (я перестану упоминать экраны)
  • \p{Lu}+= Один или несколько букв в верхнем регистре (используя правильный Unicode escape — спасибо, tchrist, за то, что указали это в своем комментарии ниже. В английских терминах эквивалент будет [A-Z]+)
  • .*= Что-нибудь еще

Подробнее см. здесь документацию.

Вам нужно только .* в конце, если вы используете метод типа String#match (выше), который будет пытаться сопоставить всю строку.

Ответ 2

Это зависит от того, какой метод вы используете. Я думаю, что это сработает, если вы используете Matcher.find(). Это не сработает, если вы используете Matcher.matches(), потому что совпадение работает на всей строке. Если вы используете match(), исправьте свой шаблон следующим образом:

^\d+\.\s{1}[A-Z]+.*

(обратите внимание на trailing .*)

И я бы использовал \. вместо [.]. Это более читаемо.

Ответ 3

"^[0-9]+\. [A-Z]+ .+"