Проверка, соответствует ли строка шаблону
Как проверить, соответствует ли строка следующему шаблону?
Шаблон: заглавная буква, число(а), заглавная буква, число(а) и так далее.
Примеры:
Эти строки соответствуют шаблону:
A1B2
B10L1
C1N200J1
Эти строки не соответствуют (символ '^' указывает на проблему):
a1B2
^
A10B
^
AB400
^
Как мне реализовать проверку на соответствие этому шаблону?
5 ответ(ов)
Ваш код использует регулярные выражения для проверки строки string
на соответствие заданному паттерну. Давайте разберем его по частям.
Импортируем модуль
re
: Это стандартный модуль в Python для работы с регулярными выражениями.import re
Компиляция паттерна: Здесь вы создаете компилированный объект регулярного выражения с помощью
re.compile()
. Ваш паттерн^([A-Z][0-9]+)+$
имеет следующее значение:^
— начало строки,([A-Z][0-9]+)
— группа, содержащая один заглавный латинский символ, за которым следует один или несколько цифр,+
— одна или более таких групп,$
— конец строки.
Таким образом, ваш паттерн проверяет, состоит ли строка из одной или нескольких сегментов, где каждый сегмент представляет собой заглавную букву, за которой следуют цифры.
pattern = re.compile("^([A-Z][0-9]+)+$")
Проверка строки: Метод
match()
проверяет, соответствует ли строка от начала до конца паттерну.pattern.match(string)
Если ваша строка соответствует данному паттерну, match()
вернет объект соответствия (truthy value), в противном случае вернет None
(falsy value).
Пример использования:
Вот пример использования вашего кода для проверки:
import re
pattern = re.compile("^([A-Z][0-9]+)+$")
string = "A1B2C3" # Пример строки
if pattern.match(string):
print("Строка соответствует паттерну.")
else:
print("Строка не соответствует паттерну.")
Убедитесь, что ваша строка содержит хотя бы одну сегмент, состоящую из заглавной буквы и последующих цифр, иначе проверка не пройдет.
Вы можете использовать одну строку для проверки соответствия строки с помощью регулярного выражения, не компилируя паттерн отдельно:
import re
>>> if re.match(r"hello[0-9]+", 'hello1'):
... print('Да')
...
Да
Также вы можете оценить результат как bool
, если это необходимо:
>>> bool(re.match(r"hello[0-9]+", 'hello1'))
True
Попробуйте следующий код:
import re
name = ["A1B1", "djdd", "B2C4", "C2H2", "jdoi", "1A4V"]
# Соответствие именам.
for element in name:
m = re.match(r"(^[A-Z]\d[A-Z]\d)", element)
if m:
print(m.groups())
Здесь мы используем регулярное выражение (^[A-Z]\d[A-Z]\d)
, чтобы найти элементы списка name
, которые соответствуют шаблону из двух заглавных букв, разделенных цифрами. Обратите внимание, что метод re.match
ищет совпадения только в начале строки. В результате выполнения этого кода будут выведены совпадающие элементы по указанному шаблону.
Регулярное выражение можно настроить под ваши нужды, если необходимо изменить критерии совпадений.
Внимание! (Возможно, вам стоит проверить, совпадает ли вся строка)
Функция re.match(...)
не подойдет, если вам нужно проверить соответствие всей строки.
Например:
re.match("[a-z]+", "abcdef")
✅ даст совпадение.- Но!
re.match("[a-z]+", "abcdef 12345")
✅ тоже даст совпадение, потому что начало строки совпадает (возможно, это вас не устраивает, когда вы проверяете, является ли вся строка валидной).
Решение
Используйте re.fullmatch(...)
. Она будет возвращать совпадение только в том случае, если вся строка соответствует шаблону:
if re.fullmatch("[a-z]+", my_string):
print("Yes")
Пример
re.fullmatch("[a-z]+", "abcdef")
✅ Даre.fullmatch("[a-z]+", "abcdef 12345")
❌ Нет
Однострочник: bool(re.fullmatch("[a-z]+", my_string))
Ваш код на Python использует регулярные выражения для проверки, соответствует ли входная строка определенному шаблону. Давайте рассмотрим его подробнее и переведем на русский язык:
import re
import sys
prog = re.compile('([A-Z]\d+)+')
while True:
line = sys.stdin.readline()
if not line: break
if prog.match(line.strip()): # стоит убрать символы переноса строки в конце
print('matched')
else:
print('not matched')
Объяснение:
Импорт библиотек: Вы импортируете библиотеки
re
для работы с регулярными выражениями иsys
для работы со стандартным вводом.Компиляция регулярного выражения: Вы компилируете регулярное выражение
([A-Z]\d+)+
, которое находит последовательности, начинающиеся с заглавной буквы (A-Z), за которой следуют одна или более цифр (0-9).Чтение ввода: В бесконечном цикле вы читаете строки из стандартного ввода с помощью
sys.stdin.readline()
. Если введена пустая строка (например, пользователь закончил ввод), цикл прерывается.Проверка строки: Используя метод
match
, вы проверяете, соответствует ли строка шаблону. Однако стоит отметить, что нужно использоватьline.strip()
, чтобы убрать лишние символы переноса строк, которые могут мешать.Вывод результата: Если строка соответствует шаблону, выводится 'matched', в противном случае — 'not matched'.
Этот код будет работать в интерактивном режиме, позволяя пользователю вводить строки и получать результаты проверки в реальном времени. Учтите, что в Python 3, необходимо использовать скобки для функций print
.
Фильтрация DataFrame pandas по критериям подстроки
Разделить строку по пробелам в Python
Простой способ удалить несколько пробелов в строке?
Как найти все совпадения регулярного выражения в Python?
Разделить строку по запятым, игнорируя запятые внутри двойных кавычек?