В ситуациях синтаксического анализа split()
обычно лучше всего работает, когда вы хотите выбросить данные, которые вы разделяете. Но вы хотите сохранить его, поэтому вам, вероятно, лучше использовать подход захвата.
import re
orig_vals = [
'Champiñón 200 g',
'Zapallo italiano Unid.',
'Bolsa de zanahoria 1 kg',
'Papa malla 2 Kg',
'Palta Hass granel',
'Limón malla 1 kg',
'Tomate granel',
'Brócoli 1 un.',
'Tomate unid',
]
# We will capture the two parts of interest and
# only throw away a space in the middle. This regex is
# not super robust, but it does work correctly for the
# example data you have supplied.
rgx = re.compile('(.+) ((\d|unid).*)', re.IGNORECASE)
new_vals = []
for ov in orig_vals:
m = rgx.search(ov)
new_vals.extend([m.group(1).rstrip(), m.group(2)] if m else [ov])
И если вы действительно хотите использовать разбиение, вы можете написать более сложное регулярное выражение, используя предварительный просмотр - чтобы предотвратить потребление и, таким образом, выбрасывание текста, который мы разбиваем.
rgx2 = re.compile('(.+?) +(?=\d|unid)', re.IGNORECASE)
new_vals2 = [
part
for ov in orig_vals
for part in rgx2.split(ov)
if part
]