2013-10-21 172 views
0

我正在玩Python,并且遇到了问题。 我有其中每个字符串被构造这样一个大的数据文件:Python正则表达式将字符串拆分为5个部分

"id";"userid";"userstat";"message";"2013-10-19 06:33:20 (date)" 

我需要每行分成5枚,分号作为分隔符。但在同一时间内的报价。

这很难解释,所以我希望你明白我的意思。

+0

你需要哪种形式的最终产品?数组? – jwarner112

回答

3

使用str.split,无需正则表达式:

>>> strs = '"id";"userid";"userstat";"message";"2013-10-19 06:33:20 (date)"' 
>>> strs.split(';') 
['"id"', '"userid"', '"userstat"', '"message"', '"2013-10-19 06:33:20 (date)"'] 

如果你不想让双引号为好,然后:

>>> [x.strip('"') for x in strs.split(';')] 
['id', 'userid', 'userstat', 'message', '2013-10-19 06:33:20 (date)'] 
+0

所以这样做就意味着我可以选择像这样的每个部分:x [0]为id,x [1]为userid,依此类推?我需要每个部分都可以管理。 – BoinQ

+0

@BoinQ是的,您也可以使用序列解包来将列表项分配给变量:'idx,userid,stat,msg,dt = strs.split(';')'。顺便说一句DSM的[解决方案](http://stackoverflow.com/a/19500522/846892),它比我的解决方案更好。 –

0

您可以通过";"你分裂的情况下,也考虑使用正则表达式,如^("[^"]+");("[^"]+");("[^"]+");("[^"]+");("[^"]+")$

+0

我想我会尽量避免正则表达式,但感谢回答 – BoinQ

+0

考虑可能性在消息中有';',然后使用正则表达式 –

4

该格式看起来很像ssv:分号分隔的值(如“csv “,但用分号而不是逗号)。我们可以使用csv模块来处理这个问题:

import csv 

with open("yourfile.txt", "rb") as infile: 
    reader = csv.reader(infile, delimiter=";") 
    for row in reader: 
     print row 

产生

['id', 'userid', 'userstat', 'message', '2013-10-19 06:33:20 (date)'] 

一个优点的这种方法是,它会自动正确处理所引用的数据中分号的情况。

+0

您还可以解析纯字符串:'reader = csv.reader(['“id “;”userid“;”userstat“;”message“;”2013-10-19 06:33:20(date)“'],delimiter =';')'。另外请注意,'csv'库不能很好地与'unicode'搭配使用。 –

相关问题