The first thing to do is to see if there is another separator in there: it sound like you have 27 elements separated by "!", then an second set also separated by "!", then a third.
It would be normal under these circumstances to have a second separator to delimit each set:
(often it's a newline to make it humanly readable.) So start by looking at your data and checking that. If you do, then it's simple: spilt it into each row via teh second separator, then split each row and add that:
string rows = ast.Split('|');
foreach (string row in rows)
string cells = row.Split('!');