#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 Молодец! Здесь было очень раннее утро… :/