Как я могу разделить эту строку на python



Я изучаю 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


Я мог бы позвонить на линию.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
429   3  

3 ответов:

Вы можете сделать следующее:

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

Что приведет к

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

Попробуйте

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

Это будет работать, если строки разделены более чем одним пробелом. Если они обозначены табуляцией, попробуйте

import re
sep = re.split("\t+", str)
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

Это будет работать с любым размером пробелов или вкладок.

Comments

    Ничего не найдено.