import re
from pprint import pprint
def explode(s, keywords):
for k in keywords:
m = re.search(r'(%s~[^~]*)(?:~|$)' % (re.escape(k),), s)
yield m and m.group(1)
lst = [
['171000', 'Thing..Mega~Corporate~Thing..Mid~Dairy~Thing..Micro~Cheese', 'Cheese', '0.012174'],
['171000', 'Thing..Mega~Corporate', 'Cheese', '0.012174'],
]
print("Before:")
pprint(lst)
for row in lst:
row[1:2] = explode(row[1], "Mega Mid Micro".split())
print("\nAfter:")
pprint(lst)
aW1wb3J0IHJlCmZyb20gcHByaW50IGltcG9ydCBwcHJpbnQKCmRlZiBleHBsb2RlKHMsIGtleXdvcmRzKToKICAgIGZvciBrIGluIGtleXdvcmRzOgogICAgICAgIG0gPSByZS5zZWFyY2gocicoJXN+W15+XSopKD86fnwkKScgJSAocmUuZXNjYXBlKGspLCksIHMpCiAgICAgICAgeWllbGQgbSBhbmQgbS5ncm91cCgxKQoKCmxzdCA9IFsKIFsnMTcxMDAwJywgJ1RoaW5nLi5NZWdhfkNvcnBvcmF0ZX5UaGluZy4uTWlkfkRhaXJ5flRoaW5nLi5NaWNyb35DaGVlc2UnLCAnQ2hlZXNlJywgJzAuMDEyMTc0J10sCiBbJzE3MTAwMCcsICdUaGluZy4uTWVnYX5Db3Jwb3JhdGUnLCAnQ2hlZXNlJywgJzAuMDEyMTc0J10sCl0KCnByaW50KCJCZWZvcmU6IikKcHByaW50KGxzdCkKCmZvciByb3cgaW4gbHN0OgogICAgcm93WzE6Ml0gPSBleHBsb2RlKHJvd1sxXSwgIk1lZ2EgTWlkIE1pY3JvIi5zcGxpdCgpKQoKcHJpbnQoIlxuQWZ0ZXI6IikKcHByaW50KGxzdCk=
Before:
[['171000',
'Thing..Mega~Corporate~Thing..Mid~Dairy~Thing..Micro~Cheese',
'Cheese',
'0.012174'],
['171000', 'Thing..Mega~Corporate', 'Cheese', '0.012174']]
After:
[['171000',
'Mega~Corporate',
'Mid~Dairy',
'Micro~Cheese',
'Cheese',
'0.012174'],
['171000', 'Mega~Corporate', None, None, 'Cheese', '0.012174']]