Токенизируйте командную строку - PullRequest
1 голос
/ 27 апреля 2010

У меня есть такая строка:

command ". / * or any other char like this" some_param="string param" some_param2=50

Я хочу разбить эту строку на:

command
". / * or any other char like this"
some_param="string param"
some_param2=50

Я знаю, что можно разделить пробелами, но эти параметры также можно разделить запятыми, например:

command ". / * or any other char like this", some_param="string param", some_param2=50

Я пытался сделать это так:

\w+\=?\"?.+\"?

но это не сработало.

Ответы [ 2 ]

3 голосов
/ 27 апреля 2010

Модуль stdlib shlex предназначен для синтаксического анализа командного синтаксиса:

>>> import shlex
>>> s = 'command ". / * or any other char like this" some_param="string param" some_param2=50'
>>> shlex.split(s)
['command', '. / * or any other char like this', 'some_param=string param', 'some_param2=50']

Единственное отличие от желаемого результата состоит в том, что строка в кавычках возвращается как строковое значение, а не как строковый литерал в кавычках.

2 голосов
/ 27 апреля 2010

Как то так?

>>> x='command ". / * or any other char like this" some_param="string param" some_param2=50'
>>>
>>> re.findall('\w+\=\d+|\w+\="[^"]+"|"[^"]+"|\w+',x)
['command', '". / * or any other char like this"', 'some_param="string param"', 'some_param2=50']
>>>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...