Разделить строку на список, но два слова в кавычках как одно? - PullRequest
0 голосов
/ 09 мая 2020

Я пытаюсь создать свою маленькую консоль на Python3, и я пытаюсь разделить мои заданные команды.

Например:

mkdir dir становится arg [0] = mkdir, arg [1] = dir

Я знаю, что могу сделать это с args.split (''), но я пытаюсь сделать так, чтобы все в кавычках становилось одним аргументом.

Например:

mkdir «Новая папка» становится arg [0] = mkdir, arg [1] = New Folder.

Ответы [ 2 ]

0 голосов
/ 09 мая 2020

Это должно работать:

def splitArgsIntoArguments(args):
    result = args.split(' ')
    i = 0
    length = len(result)
    while i <  length:
        if result[i][0] == '"':
            # Trim string
            result[i] = result[i][1:]
            # Then for each next element merge it with result[i] until it ends with '"'
            for j in range(i+1 , len(result)):
                stop = False
                if result[j][-1] == '"':
                    # Trim string
                    result[j] = result[j][0:-1]
                    stop = True
                result[i] += " " + result[j]
                # Remove the jth element from the list
                result = result[0:j] + result[j+1:]
                # Then substract one from the length to not get out of range error
                length -= 1
                if stop: break
        i += 1

    return result

Это немного некрасиво, но функция перебирает каждый аргумент в списке результатов и, если он начинается с '"', она объединяет все элементы справа от него, пока он находит тот, который заканчивается на '"'.

0 голосов
/ 09 мая 2020

Вы можете сделать следующее, используя shlex:

import shlex
res = shlex.split('mkdir "New Folder"')
print(res)
# ['mkdir', 'New Folder']

Другой вариант, используя re:

import re
[p for p in re.split("( |\\\".*?\\\"|'.*?')", 'mkdir "New Folder"') if p.strip()]
# ['mkdir', '"New Folder"']

Или:

import re
res3 = re.findall("(?:\".*?\"|\S)+", 'mkdir "New Folder"')
print(res3)
# ['mkdir', '"New Folder"']

Другое вариант с использованием csv:

import csv
res4 = list(csv.reader(['mkdir "New Folder"'], delimiter=' '))[0]
print(res4)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...