我怎么能在python中拆分这个字符串

时间:2016-11-28 05:17:37

标签: python regex

我正在学习Python(3)。我想将这些行分成四个单独的部分。

[Test Branch]             bobjones       0         6/13/2008 4:24 PM
[Todd's Workspace]        tfatcher       0         6/16/2008 9:20 AM
[Henry]                   hmckinkley     1         6/17/2008 10:12 AM
[Henry]                   hmckinkley     0         6/17/2008 10:15 AM

我可以在每一个上调用line.split(),但之后我会将日期重新组合在一起。我猜第一个[]部分中的空格也排除了这一点。我想我可以将其切片,但我并不是100%确定这些数据是固定的宽度。正则表达式可能是最好的,是吗?关于那个的任何指示?

更新: 我认为@ Selcuk的解决方案非常有效:

branch,user,version,timestamp = [commitheaderline.split("]", 1)[0] + "]"] + commitheaderline.split("]", 1)[1].split(None, 2)

但后来我遇到了一些用户名太长的数据(例如下面的例子),所以其余的数据最终都在新的一行上。所以我现在正在努力。我想我在运行split()之前以某种方式测试了这条线,如果它看起来不像是一个"正确的"第一行将它加入下一个。

[Test Branch]             bobjones       0         6/13/2008 4:24 PM
[Todd's Workspace]        tfatcher       0         6/16/2008 9:20 AM
[cole]                    bob.darknsdale
                                         0        7/27/2012 12:49 PM

3 个答案:

答案 0 :(得分:2)

尝试

import re
sep = re.split(" {2,}", str)

如果字符串被多个空格分隔,这将起作用。如果是标签,请尝试

import re
sep = re.split("\t+", str)

答案 1 :(得分:0)

您可以执行以下操作:

[line.split("]", 1)[0] + "]"] + line.split("]", 1)[1].split(None, 2)

将导致

['[Test Branch]', 'bobjones', '0', '6/13/2008 4:24 PM']

答案 2 :(得分:0)

In [4]: import re

In [5]: print text

[Test Branch]             bobjones       0         6/13/2008 4:24 PM
[Todd's Workspace]        tfatcher       0         6/16/2008 9:20 AM
[Henry]                   hmckinkley     1         6/17/2008 10:12 AM
[Henry]                   hmckinkley     0         6/17/2008 10:15 AM


In [6]: pattern = re.compile(r'(\[.*?\])\s+(\w+)\s+(\d+)\s+(.*?$)', re.M)


In [7]: for match in pattern.finditer(text):
   ...:     #do whatever you want here. cols are grouped
   ...:     print "first col: %s - 4th col: %s" %(match.group(1), match.group(4))
   ...:
   ...:
first col: [Test Branch] - 4th col: 6/13/2008 4:24 PM
first col: [Todd's Workspace] - 4th col: 6/16/2008 9:20 AM
first col: [Henry] - 4th col: 6/17/2008 10:12 AM
first col: [Henry] - 4th col: 6/17/2008 10:15 AM

这适用于任何大小的空格或标签。