#python #python-3.x #regex
#python #python-3.x #регулярное выражение
Вопрос:
У меня есть требование, при котором мне нужно сопоставить строку, которая удовлетворяет всем приведенным ниже требованиям —
- Строка должна иметь длину 12
- Строка может содержать только следующие символы — алфавиты, цифры и пробелы
- Пробелы, если они есть, должны быть в конце строки. Пробелы между ними не допускаются.
Я пробовал использовать приведенное ниже регулярное выражение —
"^[0-9a-zA-Zs]{12}$"
Приведенное выше регулярное выражение удовлетворяет требованиям # 1 и # 2, но не может удовлетворить # 3.
Пожалуйста, помогите мне выполнить требования.
Заранее спасибо!!
Ответ №1:
Вы можете использовать
^(?=.{12}$)[0-9a-zA-Z]*s*$
Если должна существовать хотя бы одна буква:
^(?=.{12}$)[0-9a-zA-Z] s*$
Подробные сведения:
^
— начало строки(?=.{12}$)
— строка должна содержать 12 символов[0-9a-zA-Z]*
— ноль или более буквенно-цифровых символовs*
— ноль или более пробелов$
— конец строки.
Смотрите демонстрацию регулярных выражений.
Комментарии:
1. Это работает на соответствие, как насчет решения, которое позволяет выполнять поиск?
2. @mozway Этот комментарий не имеет отношения к текущим требованиям. Вопрос OP касается проверки, а не извлечения из более длинного текста.
3. Таким образом, мой вопрос, мне любопытно, есть ли у вас ответ на это 😉
4. @mozway Тогда, пожалуйста, продолжайте и опубликуйте его. Я не знаю ваших точных требований.
5. Thanks..it решил мою проблему. Но не могли бы вы объяснить мне (?=.{12} $), как это работает?
Ответ №2:
Используйте границу, не содержащую слов B
:
^(?:[a-zA-Z0-9]|sB){12}$
С его помощью за пробелом не может следовать буква или цифра, а только несловесный символ (пробел здесь) или конец строки.
Чтобы гарантировать, что хотя бы один символ не является пустым:
^[a-zA-Z0-9](?:[a-zA-Z0-9]|sB){11}$
Обратите внимание, что с PCRE вы должны использовать модификатор D (ТОЛЬКО для КОНЦА ДОЛЛАРА), чтобы убедиться, что $
он соответствует концу строки, а не перед последней последовательностью перевода строки. Или лучше заменить $
на z
. С Python и модулем re такой проблемы нет.
Ответ №3:
Вы можете использовать это регулярное выражение:
^(?!.*hS)[da-zA-Zh]{12}$
Демонстрация регулярных выражений
Подробности регулярных выражений:
^
: Начать(?!.*hS)
: Отрицательный прогноз на ошибку сопоставления, если за пробелом следует символ, не содержащий пробелов[da-zA-Zh]{12}
: Сопоставьте 12 буквенно-цифровых символов или пробелов$
: End