Проверка строки регулярного выражения для определенного символа - PullRequest
0 голосов
/ 07 июля 2019

Требования:
1. первый символ - это число
2. строка содержит две буквы
3. пробел в любом месте строки

Мне удалось кодировать (1) и (2), но я не знал, как вставить (3) в существующий код.

[0-9].*?[a-zA-Z].*?[a-zA-Z].*

Следующее должно пройти без кавычки :
"12as"
"63 1/2 W Blanche St"
"12A Elray Road"
"2332 Jones Rd, Apt # 5"
"2 Jones Rd, Apt # 5"
"3 Jones Rd P.O Box"
"4 Jones Rd, abc"
"5 Джонс - DFE"

Ответы [ 3 ]

1 голос
/ 07 июля 2019

Ваш шаблон на правильном пути. Одним из простых исправлений здесь было бы добавить положительный прогноз (?=.* ), который добавляет утверждение, что в строке встречается пробел.

^[0-9](?=.* ).*?[a-zA-Z].*[a-zA-Z].*$

Демо

Это работает, требуя, чтобы строка начиналась с цифры ([0-9]) и содержала две обязательные буквы ([a-zA-Z]). Предварительный просмотр (?=.* ) утверждает, что строка содержит хотя бы один пробел.

0 голосов
/ 07 июля 2019

Ваш шаблон не учитывает обязательное пространство.Вы можете использовать положительный прогноз, чтобы утверждать, что есть хотя бы один пробел, сопоставив 0+ раз с непробельным символом, а затем с пробелом (?=\S* )

Поскольку вы используете .* для сопоставления с любым символом, выможет также использовать отрицательный класс символов [^a-zA-Z\r\n], чтобы не совпадать с a-zA-Z или переводом строки, а затем совпадать с a-zA-Z

^[0-9](?=\S* )[^a-zA-Z\r\n]*[a-zA-Z][^a-zA-Z\r\n]*[a-zA-Z].*$

Regex demo

Вы также можете использовать положительный прогноз, чтобы 2 раза утверждать символ a-zA-Z.Затем сопоставьте один пробел и оставшуюся часть строки.

^[0-9](?=(?:[^a-zA-Z\r\n]*[a-zA-Z]){2})\S* .*$

Пояснение

  • ^ Начало строки
  • [0-9] Совпадение с цифрой
  • (?= Позитивный прогноз, утверждаем, что справа
    • (?:[^a-zA-Z\r\n]*[a-zA-Z]){2} Повторяющаяся группа, совпадение 2 раза a-zA-Z
  • ) Закрыть положительный прогноз
  • \S* .* Соответствовать 0+ раз символу, не являющемуся пробелом, затем обязательный пробел, за которым следует поиск любого символа, кроме новой строки
  • $ Подтвердить конец строки

Regex demo

0 голосов
/ 07 июля 2019

Я не думаю, что выражение, которое вы хотите разработать, было бы таким простым, мы могли бы начать с этого выражения с низкой границей:

^[0-9]+(?:[A-Za-z]{1,2})?[A-Za-z0-9\s,.\/#-]+$

ДЕМО 1

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