Разбиение строки
Как эффективно и красиво организовать функцию, которая будет разбивать строку на лист? В начале: мне нужно сделать функцию которая будет резать строку на параметры (лист), где элементы разделены пробелом или используются кавычки (в массиве такой элемент может содержать пробелы, но не будет содержать кавычки
>>> def foo(string: str):
... #...
... return result
# В кавычках воспринимается ↓ как одно целое
>>> foo('command hello 1 "1 2 3"')
# ↑ разделитель: пробел
["command", "hello", "1", "1 2 3"]
# Кавычки пропали ↑
>>> foo('1 2 3 "1 2 3"')
['1', '2', '3', '1 2 3']
>>> foo('# $%^&11')
['#', '$%^&11']
>>> foo('1 "1"')
['1', '1']
>>> foo('1 3 5')
['1', '3', '5']
>>> foo('__ __ __')
['__', '__', '__']
>>> foo(' 1')
['1']
>>> foo('" 1"')
[' 1']
При этом .split() не подходит:
# если я хочу использовать .split
>>> '1 "1 1"'.split()
['1', '"1', '1"']
# НО ДОЛЖНО БЫТЬ
>>> foo('1 "1 1"')
['1', '1 1']
Ответы (1 шт):
Автор решения: asanisimov
→ Ссылка
Можно сначала разбить по условию s.split(' "') тогда вы сможете разделить строки с кавычками и без, при это закрывающая кавычка останется в строке, по её наличию мы будем понимать как добавлять элемент в результирующий список. Если добавляется строка без кавычек, то .strip() удаляет ненужные пробелы
def foo(s: str) -> list:
lst = s.split(' "') # ['1 2 3', '1 2 3"']
result = []
for x in lst:
if '"' in x:
result.append(x.replace('"', ''))
else:
result += x.strip().split(' ')
return result
print(foo('1 2 3 "1 2 3"')) # ['1', '2', '3', '1 2 3']