Не разделяйте слова с двойными кавычками с помощью 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
для шаблона "[ ^ "] * " и применить строку.разделить только на оставшиеся части. Вы можете реализовать рекурсивную функцию, которая обрабатывает все соответствующие строковые части.