Я пришел к этой дилемме, работая над улучшением управления моей полуавтоматической библиотекой для программного обеспечения ECAD (а именно KiCad). Ниже приведен лишь пример, который, я надеюсь, отражает проблему, с которой я столкнулся.
Файл библиотеки содержит несколько строк, и иногда в строке могут быть двойные кавычки, встроенные в одно из ее полей, для управления которым добавляется escape-символ \
. Например:
string = "\"This is a \\\"difficult\\\" problem\" please help"
print(f'string = {string}')
выведет:
string = "This is a \"difficult\" problem" please help
Мне нужно разбить эту строку, используя shlex (это было решение выбора, я хотел бы сохранить его), следуя этим 2 условия:
- "Это ... проблема" должно быть одиночным элементом списка
- двойными кавычками вокруг обоих "Это ... проблема "и" трудная "должна быть сохранена.
Примечание: в этом примере два других слова please
и help
не требуют специальной обработки.
I пробовал с posix=False
и posix=True
:
- с использованием
posix=False
s1 = shlex.shlex(string, posix=False)
slist1 = list(s1)
print(f'slist1 = {slist1}')
Выход:
slist1 = ['"This is a \\"', 'difficult', '\\', '" problem"', 'please', 'help']
s2 = shlex.shlex(string, posix=True)
slist2 = list(s2)
print(f'slist2 = {slist2}')
Вывод:
slist2 = ['This is a "difficult" problem', 'please', 'help']
В первом случае сразу видно, что оно не соответствует условию # 1.
Во втором случае почти удовлетворяет обоим условиям, но не сохраняет двойные кавычки вокруг "Это ... проблема". Я не могу просто добавить их после разделения, потому что я не знаю, какую позицию занимает строка в списке, и я не хочу добавить двойные кавычки ко всем записям.
Есть ли хитрость для решения этой проблемы или я просто врезаюсь в стену?
Буду очень признателен за помощь!