Регулярное выражение с использованием скобок для одного символа - PullRequest
1 голос
/ 29 мая 2019

Я решал эту проблему регулярных выражений

Учитывая тестовую строку s, напишите RegEx, соответствующий s при следующих условиях:

s должно начинаться с Mr., Mrs., Ms., Dr. или Er.

Остальная часть строки должна содержать только одну или несколько букв английского алфавита (верхний и нижний регистр).

Я использовал этот шаблон

Regex_Pattern = r'^(Mr|Mrs|Ms|Dr|Er)\..[A-Za-z]+$'

но он не прошел этот тестовый пример "Ms._underscore", затем я попытался использовать этот шаблон

Regex_Pattern = r'^(Mr|Mrs|Ms|Dr|Er)[\..][A-Za-z]+$'

и он прошел все тестовые случаи, я не могу понять разницу.

Ответы [ 2 ]

3 голосов
/ 29 мая 2019

Здесь мы можем визуализировать наши выражения и проверить:

enter image description here

enter image description here

Мы видим, что здесь есть разница между \.. и [\..].

  • В первом мы говорим, что у нас должен быть ., за которым следует любой символ.
  • Во втором мы хотим просто передать один из . или ., который равен [.].

Демонстрация для второго выражения

RegEx Circuit

jex.im визуализирует регулярные выражения:

1 голос
/ 29 мая 2019

Я думаю, вы можете поменять две схемы. Второй не совпадает, а первый совпадает:

^(Mr|Mrs|Ms|Dr|Er)\..[A-Za-z]+$
Демо 1

^(Mr|Mrs|Ms|Dr|Er)[\..][A-Za-z]+$
Демо 2

Второй использует класс символов [\..], который удаляет особое значение любых токенов регулярных выражений (например, . в [] соответствует буквальному периоду, а не его специальному значению (любому символу). Первый шаблон соответствует буквальному периоду сопровождаемый любым другим символом, кроме символа новой строки. Подробнее об этом см. «Объяснение» справа в демонстрационных ссылках выше.

ОБНОВЛЕНИЕ: ваш шаблон также будет соответствовать Ms.underscore (без пробела между названием и именем). Итак, рассмотрим следующую схему, которая, я думаю, лучше подходит для того, что вы ищете:

^(Mr|Mrs|Ms|Dr|Er)\.[ _][A-Za-z]+$
Демо 3

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