2016-06-01 25 views
0

私はファイルを解析し、pythonで行を分割しようとしています。現在、私はファイルを解析し、リストに読み込むことができます。私はそれぞれの行を取得しようとすると、括弧でそれを分割しています文字列分割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'] 

をしかし、結果I私は得る:

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

私はそれがvarcharの括弧のために信じています。 括弧の最初の出現と最後の出現だけで分割する方法はありますか?

+0

関連〔セパレータの最後の発生に基づいて2で分割文字列](http://stackoverflow.com/q/7351744) –

答えて

3

括弧の最初の出現と最後の出現だけで分割する方法はありますか?

はい、partitionrpartitionを使用してください。

>>> 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 = 'datediff(varchar(30)、timestamp(3)、timestamp(3))'からs = 'datediff' – 3rdeye7