Мне кажется, что в первых полях адреса есть запятые, которые могут создавать неровности, и я не уверен, что может быть лучшим способом их обойти, но это выражение:
(.*),(.*),\s*([0-9.-]+)\s*,\s*([0-9.]+)\s*,([0-9]{4,5}(?:-[0-9]{4})?)\s*,\s*([A-Z]{2})
может быть подходом для изучения.
Почтовые индексы США обычно имеют следующие форматы:
([0-9]{5}(?:-[0-9]{4})?)
только для демонстрации, я включил:
[0-9]{4,5}
который вы можете просто удалить.
Пример
import re
regex = r"(.*),(.*),\s*([0-9.-]+)\s*,\s*([0-9.]+)\s*,([0-9]{4,5}(?:-[0-9]{4})?)\s*,\s*([A-Z]{2})"
test_str = ("Address,Name,Lat,Long,2016 Sales,Type\n"
"48 Park Avenue, LATTON, SN6 4SZ,Nikki Yellowbeard,-23.17549,36.74641,9727,AA\n"
"IV21 1TD 116 Walwyn Rd CHARLESTOWN,Jonh Doe,-10.98309,156.41854,11932,AE")
matches = re.finditer(regex, test_str, re.MULTILINE)
for matchNum, match in enumerate(matches, start=1):
print ("Match {matchNum} was found at {start}-{end}: {match}".format(matchNum = matchNum, start = match.start(), end = match.end(), match = match.group()))
for groupNum in range(0, len(match.groups())):
groupNum = groupNum + 1
print ("Group {groupNum} found at {start}-{end}: {group}".format(groupNum = groupNum, start = match.start(groupNum), end = match.end(groupNum), group = match.group(groupNum)))
Если бы мы не проверяли значения, то просто это выражение
(.*),(.*),(.*),(.*),(.*),(.*)
может сработать.