Вот простой алгоритм:
- Определите, начинается ли строка с символа
'"'
- Разбить строку на массив, ограниченный символом
'"'
.
- Отметьте запятые в кавычках с помощью заполнителя
#COMMA#
- Если ввод начинается с
'"'
, отметьте те элементы в массиве, где индекс% 2 == 0
- В противном случае пометьте те элементы в массиве, где индекс% 2 == 1
- Объединить элементы в массиве, чтобы сформировать измененную строку ввода.
- Разбить строку на массив, разделенный символом
','
.
- Заменить все экземпляры в массиве
#COMMA#
заполнителей на символ ','
.
- Массив - это ваш вывод.
Вот реализация Python:
(фиксируется для обработки '' a, b ", c," d, e, f, h "," i, j, k "')
def parse_input(input):
quote_mod = int(not input.startswith('"'))
input = input.split('"')
for item in input:
if item == '':
input.remove(item)
for i in range(len(input)):
if i % 2 == quoted_mod:
input[i] = input[i].replace(",", "#COMMA#")
input = "".join(input).split(",")
for item in input:
if item == '':
input.remove(item)
for i in range(len(input)):
input[i] = input[i].replace("#COMMA#", ",")
return input
# parse_input('a,"string, with",various,"values, and some",quoted')
# -> ['a,string', ' with,various,values', ' and some,quoted']
# parse_input('"a,b",c,"d,e,f,h","i,j,k"')
# -> ['a,b', 'c', 'd,e,f,h', 'i,j,k']