@rsytrade

Как проверить строку на соответствие шаблону?

Функция возвращает строку следующего формата и шаблона:
HUxRUx23,5-FG:4x45₽

В формате: f”{srt}x{str}x{float}-{str}:{int}x{int}₽»
Как осуществить проверку на соответствие шаблону и формату, в случае отсутствия какого-либо элемента или его несоответствия типу данных остановить выполнение программы с указанием где ошибка. Строка на выходе должна точно соответствовать шаблону и формату ( Желательно без regex).
  • Вопрос задан
  • 279 просмотров
Пригласить эксперта
Ответы на вопрос 3
Lord_of_Rings
@Lord_of_Rings
Python developer
Я не знаю другого способа, кроме регулярных выражений (модуль re)
Ответ написан
Комментировать
seven5674
@seven5674
Старый я уже что бы что-то в себе менять
^[a-zA-Z]+?x[a-zA-Z]+?x\d+?(\.|,)\d+?-[a-zA-Z]+?:\d+?.+?$

или
^\D+?x\D+?x\d+?(\.|,)\d+?-\D+?:\d+?x\d+.+?$

spoiler

import re

ss = [
    "HUxRUx23,5-FG:4x45₽",
    "HU44xRUx23,5-FG:4x45₽",
    "HUxRUx23,5-FG4:4x45₽",
    "HUxENx23,5-FG:4x50₽",
]

for s in ss:
    if re.match(r"^\D+?x\D+?x\d+?(\.|,)\d+?-\D+?:\d+?x\d+.+?$", s):
    #if re.match(r"^[a-zA-Z]+?x[a-zA-Z]+?x\d+?(\.|,)\d+?-[a-zA-Z]+?:\d+?.+?$", s):        
        print("{} - Ok".format(s))
    else:
        print("{} - Err".format(s))

и...
HUxRUx23,5-FG:4x45₽ - Ok
HU44xRUx23,5-FG:4x45₽ - Err
HUxRUx23,5-FG4:4x45₽ - Err
HUxENx23,5-FG:4x50₽ - Ok

Ответ написан
Комментировать
TalismanChet
@TalismanChet
Лицо зла
f”{srt}x{str}x{float}-{str}:{int}x{int}₽» что это? восприму это как: "<str>x<str>x<float>-<str>:<int>x<int>₽»"

В таком случае, можно сделать так:

import re


...

def teststr(data: str):
    floatre = r"([0-9](?:_?[0-9])*\.(?:[0-9](?:_?[0-9])*)?|\.[0-9](?:_?[0-9])*)"
    intre = r"(0[xX](?:_?[0-9a-fA-F])+|0[bB](?:_?[01])+|0[oO](?:_?[0-7])+|(?:0(?:_?0)*|[1-9](?:_?[0-9])*))"
    strre = r"([^'\\]*(?:\\.[^'\\]*)*'|[^\"\\]*(?:\\.[^\"\\]*)*\")"
    regex = re.compile(r"[a-zA-Z]+x[a-zA-Z]+x"+floatre+r"-[a-zA-Z]+:"+intre+r"x"+intre+r"₽»")
    return re.match(regex, data)

...
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы