Довольно ясно, что описание может содержать произвольный текст, поэтому \w
не применяется. Что отличает описание от остальной части строки, это необычно большое количество пробелов. В этом случае вам не нужно регулярное выражение:
line = 'HOSE 1/4 X BSP F 3/8 Each\n'
descr = line.split(' ')[0]
Я использовал здесь три пробела в качестве безопасной ставки. Если число является фиксированным, и вы знаете его заранее, используйте его вместо этого.
Поскольку, как представляется, вам требуется решение регулярных выражений с использованием именованной группы захвата, одним из вариантов является использование положительных просмотров:
(?P<descr>^.+?(?= ))
+?
будет делать жадный захват любых символов в начале строки, если за ними следуют три или более пробела. Сами конечные пробелы не захватываются, потому что они проверены положительным прогнозом (?= )
.