Регулярное выражение для проверки символов перед точкой — A-Z и только после одного пробела

#regex

#регулярное выражение

Вопрос:

Мне нужно регулярное выражение, в котором символы перед точкой (если они там есть) от ‘A’ до ‘Z’ или от ‘a’ до ‘z’, а после единственного допустимого символа — пробел (возможно, за которым следуют другие символы). Поэтому следующее должно соответствовать:

 Mr. Smith
SMITH MR. (space here)
dr. Jones MD. (space here)
Guy Here
HERE GUY
  

В настоящее время я пытаюсь использовать следующее регулярное выражение:

 ([a-zA-Z]*.s)[a-zA-Z]*
  

Не уверен, куда идти дальше.

Комментарии:

1. что не так с регулярным выражением, которое вы пробовали?

2. Это совсем не ясно. Вы говорите, что после букв должен быть пробел, но тогда dr. Jones не может совпадать.

3. Мои извинения. Когда я говорю после, я имею в виду после точки. Не после букв. Поэтому: «dr. Джонс » должен работать, но «др. Jones MD.» должен завершиться неудачей. Надеюсь, это прояснит ситуацию.

Ответ №1:

Сопоставьте либо не точку, либо точку, окруженную соответствующим материалом:

 ^([^.]|(?<=[a-zA-Z]).(?= ))*$
  

Смотрите живую демонстрацию.

Разбивка:

  • ^ начать
  • [^.] без точки
  • (?<=[a-zA-Z]) предыдущий символ был буквой
  • . точка
  • (?= ) следующий символ — пробел
  • $ конец

И там есть чередование, (a|b)* означающее «любое количество a или b «.

Комментарии:

1. Спасибо! И отличное объяснение! Здорово, когда кто-то разбирает это, и я могу извлечь уроки из того, что они говорят.

2. (?<=[a-zA-Z]) previous char was a dot ??

3. @ThomasAyoub Молодец! Здесь было очень раннее утро… :/