我正在学习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
答案 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
这适用于任何大小的空格或标签。