Python дилемма использования shlex posix - PullRequest
0 голосов
/ 27 марта 2020

Я пришел к этой дилемме, работая над улучшением управления моей полуавтоматической библиотекой для программного обеспечения 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 условия:

  1. "Это ... проблема" должно быть одиночным элементом списка
  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']
  • Использование posix=True
s2 = shlex.shlex(string, posix=True)
slist2 = list(s2)
print(f'slist2 = {slist2}')

Вывод:

slist2 = ['This is a "difficult" problem', 'please', 'help']

В первом случае сразу видно, что оно не соответствует условию # 1.

Во втором случае почти удовлетворяет обоим условиям, но не сохраняет двойные кавычки вокруг "Это ... проблема". Я не могу просто добавить их после разделения, потому что я не знаю, какую позицию занимает строка в списке, и я не хочу добавить двойные кавычки ко всем записям.

Есть ли хитрость для решения этой проблемы или я просто врезаюсь в стену?

Буду очень признателен за помощь!

...