У меня есть динамически созданный набор строк, разделенных ;
Теперь я хочу преобразовать их в массив, как
st = "app; map; 'better tap'; nima;"
st_n = st.split(';')
print(st_n)
Это работает нормально до тех пор, пока есть только одно слово, как app
но когда есть 'better tap'
(которого я получаю много), оно заключает их в лишние ""
. Как я могу это исправить?
['app', 'map', '' лучше нажмите '', 'nima']
Вы можете удалить "от лучшего крана до разделения":
st = "app; map; 'better tap'; nima;"
st_n = st.replace('\'', '').split(';')
print(st_n)
дает:
['app', 'map', 'better tap', 'nima', '']
'
символов в словах , которые должны быть сохранены. например, слово don't
один чистый способ - использовать модуль csv
:
st = "app; map; 'better tap'; nima;"
import csv
tokens = next(csv.reader([st],delimiter=";",quotechar="'",skipinitialspace=True))
результат:
['app', 'map', 'better tap', 'nima', '']
(вы можете отфильтровать пустое поле в конце или st.strip(";")
строку с помощью st.strip(";")
если это проблема).
сильная сторона заключается в том, что она надежна для разграничения символов, если она заключена в кавычки. Изменить st
как:
st = "app; map; 'better ; tap'; nima"
ты получишь
['app', 'map', 'better ; tap', 'nima']
Эта строка может быть проанализирована модулем csv
должным образом благодаря skipinitialspace
параметру skipinitialspace
который допускает (и skipinitialspace
) пространство после разделителя.
[word.strip("' ") for word in st.split(';')]