2010-04-27 2 views
1

У меня есть строка, как это:разбития командная строка

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

Что-то вроде этого?

>>> 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'] 
>>> 
+0

Я попытался изменить регулярное выражение с добавлением '| \ ш + = "{3} [^"] + "{3}' после этого обрабатывать ParamName = "" "paramvalue" "" параметры типа тоже, но Бесполезный" т работа. это странно. – pocoa

+0

Хорошо, я положил, что на фронте, теперь он работает! Спасибо! – pocoa

+0

@pocoa, я думаю, вам нужно добавить, что перед другими, как '\ W + =«{3} [^» ] + "{3} | \ ш + = \ d + | \ ш + =" [^ "] +" | "[^"] + "| \ ш +' – YOU

2

Модуль 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'] 

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

+0

Спасибо, это хороший инструмент. Но это не работает, когда эти параметры разделяются запятыми. – pocoa

Смежные вопросы