我正在尝试解析文件并在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 :(得分: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