#python #regex #standards
Вопрос:
Я начинаю с регулярного выражения и хотел бы найти такие стандарты, как:
FR ISO 23213: 2020 или DIN EN 2323-2
Я пробую это — в разделах, поэтому им легче управлять
std_prefix = '[EN|DE|FR| ]?[ISO|DIN][EN|DE|FR| ]?'
std_value = 'd{1,5}(?:[-]d{1,2})?(?:[:]d{4})'
std = ''.join([std_prefix, std_value])
Что я получаю: ‘EN 2323’, ‘SO 23213’
- Я скучаю по DIN в первом примере
- Я всегда пропускаю окончание: 2020 или -2, если оно есть, это варианты
спасибо за некоторые указания по дальнейшей точной настройке.
Комментарии:
1. К вашему сведению, вы можете проверить свое регулярное выражение на своих данных на таких сайтах, как regex101.com .
2.Попробуйте
(?:(?:EN|DE|FR|ISO|DIN)s*)*d [:-]?d
regex101.com/r/CRGWhC/1
Ответ №1:
Прежде всего, вы используете классы символов ( [...]
), как если бы они группировали конструкции, (...)
. Чтобы сгруппировать несколько альтернатив, используйте группы без захвата, (?:...|...)
.
Вы можете попробовать такой шаблон, как
b(?:(?:EN|DE|FR)s (?:ISO|DIN)|(?:ISO|DIN)s (?:EN|DE|FR))s d [-:]d
Смотрите демонстрацию регулярных выражений. Если у вас есть особые требования к соответствию конечным числам, не стесняйтесь добавлять ограничительные квантификаторы.
Подробные сведения:
b
— граница слова(?:
— начало группы без захвата:(?:EN|DE|FR)s (?:ISO|DIN)
—EN
,DE
илиFR
, а затем один или несколько пробелов и либо подстрокаISO
илиDIN
|
— или(?:ISO|DIN)s (?:EN|DE|FR)
—ISO
либоDIN
подстрока or, один или несколько пробелов, а затемEN
,DE
илиFR
)
— конец группы без захватаs
— один или несколько пробеловd
— одна или несколько цифр[-:]
— a-
или:
d
— одна или несколько цифр.