У меня есть строка, которая включает несколько подстрок в кавычках.Мне нужно разделить эту строку на подстроки, где каждая подстрока является либо строкой в кавычках, либо текстом между строками в кавычках, но она также должна игнорировать экранированные кавычки.
Примеры:
'"hello" "there"'
['"hello"', '"there"']
'MACRO "hello there"'
['MACRO', '"hello there"']
'"hello there" MACRO "again, \"Steve\""'
['"hello there"', 'MACRO', '"again, \"Steve\""']
'KERN \" "Hello there, \"buddy\""'
['KERN \"', '"Hello there, \"buddy\""']
Я вижу множество других ответов Stackexchange, но все они заинтересованы только в извлечении строки в кавычках.Я не нашел ничего, что могло бы разделить всю строку.
Я пытался использовать Shlex, но Shlex терпит неудачу с этой строкой:
c = r'KERN "Hello there, \"buddy\""'
print shlex.split(c, posix=False)
['KERN', '\\"', '"Hello there, \\"', 'buddy\\""']
"Hello there" и "buddy" должныбыть частью одной и той же строки.
Самое близкое, что у меня есть, это:
>>> m = re.search(r'([^"]*)("?:[^"\\]|\\.*")', c)
>>> print m.groups()
('KERN ', '\\" "Hello there, \\"buddy\\""')
Проблема в первой группе.Мне нужно выражение, которое говорит: «хватайте все до первой кавычки, но не включая первую кавычку, но включайте экранированные кавычки».Я не знаю, как это сделать.