Для первой части вы можете сопоставить различные форматы, используя чередование .
Вы можете сделать вторую часть необязательной, используя необязательную группу без захвата (?:...)?
и сопоставить либо /
или -
, за которыми могут следовать символы AZ и цифры 1+.
\b(?:[A-Z]+ )?(?:[A-Z]*\d{3,}|\d+(?:\.\d+)?[A-Z]+)(?:[\/-][A-Z]*\d+)?\b
Пояснение
\b
Граница слова (?:[A-Z]+ )?
По выбору соответствует 1+ символов AZ, за которым следует пробел (?:
Группа без захвата [A-Z]*\d{3,}
Соответствует 0+ раз AZ и 3 или более цифр |
или \d+(?:\.\d+)?[A-Z]+
Совпадение 1+ цифр с необязательной десятичной частью и 1+ раз AZ
)
Закрыть группу (?:
Группа без захвата [\/-][A-Z]*\d+
Совпадение либо /
или -
, 0+ раз AZ и 1+ цифры
)?
Закройте группу и сделайте необязательным \b
Граница слова
Regex demo