Instead of using a regex, just split your string on known characters
in this case once at the first : after your desired block, then and again at the first space after 18.
In Python, this could look like
>>> test_string = "18. Deutsche Post Brand Value: $3,749 million Headquarter City: Bonn Category: Logistics Year Formed: 1947"
>>> test_string.split(':') # show splitting
['18. Deutsche Post Brand Value', ' $3,749 million Headquarter City', ' Bonn Category', ' Logistics Year Formed', ' 1947']
>>>
>>> test_string.split(':')[0].split(' ', 1)[1]
'Deutsche Post Brand Value'
If you must use a regex, you could use a capture group to only match a certain block - example again in Python
>>> import re
>>> re.match(r"\d+\.\s*([^:]+)", test_string).groups()
('Deutsche Post Brand Value',)
this works by first matching \d+ N numbers \. literal period \s* any number of whitespace chars .. then () for a capture group with [^:]+ match all the values to the next :
different regex engines will have some way to refer to this group (often \1) or can be directly asked for it (.groups() or .group(1) for Python)
relevant xkcd:
