Не разделяйте слова с двойными кавычками с помощью Python string split ()?

при использовании Строковой функции Python split () у кого-нибудь есть отличный трюк для обработки элементов, окруженных двойными кавычками, как слово без разделения?

скажем, я хочу разделить только на пустое пространство, и у меня есть это:

>>> myStr = 'A Bt"C" DE "FE"tt"GH I JK L" "" ""t"O P   Q" R'
>>> myStr.split()
['A', 'B', '"C"', 'DE', '"FE"', '"GH', 'I', 'JK', 'L"', '""', '""', '"O', 'P', 'Q"', 'R']

Я хотел бы рассматривать что-либо в двойных кавычках как одно слово, даже если пробелы встроены, поэтому хотел бы закончить ниже:

['A', 'B', 'C', 'DE', 'FE', 'GH I JK L', '', '', 'O P   Q', 'R']

или, по крайней мере, это, а затем я сниму двойные кавычки:

['A', 'B', '"C"', 'DE', '"FE"', '"GH I JK L"', '""', '""', '"O P   Q"', 'R']

любые предложения без регулярных выражений?

3 ответов


вы не сможете получить такое поведение с str.split(). Если вы можете жить с довольно сложным синтаксическим анализом (например, игнорируя двойные кавычки, предшествующие обратной косой черте),shlex.split() может быть то, что вы ищете:

>>> shlex.split(myStr)
['A', 'B', 'C', 'DE', 'FE', 'GH I JK L', '', '', 'O P   Q', 'R']

@Rob: почему без регулярных выражений, если решение regexp настолько просто?

my_str = 'A B\t"C" DE "FE"\t\t"GH I JK L" "" ""\t"O P   Q" R'
print re.findall(r'(\w+|".*?")', my_str)
['A', 'B', '"C"', 'DE', '"FE"', '"GH I JK L"', '""', '""', '"O P   Q"', 'R']

Я предлагаю вам искать с re для шаблона "[ ^ "] * " и применить строку.разделить только на оставшиеся части. Вы можете реализовать рекурсивную функцию, которая обрабатывает все соответствующие строковые части.