2016-06-01 2 views
0

Я пытаюсь разобрать файл и разделить строку на python. В настоящее время я могу проанализировать файл и загрузить его в список.String splitting python

Я пытаюсь взять каждую строку и разбить его в круглых скобках,

'datediff(varchar(30),timestamp(3),timestamp(3))' 
reverse(text) 
checkcluster(int,int,int,int,int) 
declaredown(int) 

Я пытаюсь извлечь параметры в стороне функцию, как так:

['varchar(30),timestamp(3),timestamp(3)','text','int,int,int,int,int','int'] 

Однако результат я я получаю это:

['varchar(30', 'text', 'int,int,int,int,int', 'int'] 

Я считаю его из-за кронштейна в varchar. Есть ли способ разбить его только на первое вхождение и последнее вхождение скобок?

+0

Связанных [разбить строку, чтобы 2 на основе последнего вхождения сепаратора] (http://stackoverflow.com/q/7351744) –

ответ

3

Есть ли способ разделить его только на первое вхождение и последнее вхождение скобок?

Да, используйте partition и rpartition.

>>> s = 'datediff(varchar(30),timestamp(3),timestamp(3))' 
>>> s.partition("(") 
('datediff', '(', 'varchar(30),timestamp(3),timestamp(3))') 
>>> s.partition("(")[2] 
'varchar(30),timestamp(3),timestamp(3))' 
>>> s.partition("(")[2].rpartition(")") 
('varchar(30),timestamp(3),timestamp(3)', ')', '') 
>>> s.partition("(")[2].rpartition(")")[0] 
'varchar(30),timestamp(3),timestamp(3)' 

 

>>> def extract(s): 
...  return s.partition("(")[2].rpartition(")")[0] 
... 
>>> print(extract('datediff(varchar(30),timestamp(3),timestamp(3))')) 
varchar(30),timestamp(3),timestamp(3) 
>>> print(extract('reverse(text)')) 
text 
>>> print(extract('checkcluster(int,int,int,int,int)')) 
int,int,int,int,int 
>>> print(extract('declaredown(int)')) 
int 
+0

что, если я должен был использовать функция без параметра: getnextcallid(). Можно ли отобразить пустую строку. например. '' ''? – 3rdeye7

+0

На самом деле это работает, спасибо! – 3rdeye7

+0

Как бы я разделил только имя функции? например. s = 'dateiff (varchar (30), временная метка (3), временная метка (3))' только для s = 'lateiff' – 3rdeye7