Совпадение регулярного выражения Java - PullRequest
11 голосов
/ 16 декабря 2010

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

1. PTYU fmmflksfkslfsm

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

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

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

Ответы [ 3 ]

27 голосов
/ 16 декабря 2010

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

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

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 (выше), который будет пытаться сопоставить всю строку .

1 голос
/ 16 декабря 2010

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

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

(обратите внимание на трейлинг .*)

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

0 голосов
/ 16 декабря 2010

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

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