У меня есть файл .txt с такими данными:
[12.06.17, 13:18:36] Name1: Test test test
[12.06.17, 13:20:20] Name2 ❤️: blabla
[12.06.17, 13:20:44] Name2 ❤️: words words words
words
words
words
[12.06.17, 13:29:03] Name1: more words more words
[12.06.17, 13:38:52] Name3 Surname Nickname: ??
[12.06.17, 13:40:37] Name1: message?
Обратите внимание, что перед сообщением может быть несколько имен, а также могут появиться многострочные сообщения.Я уже много раз пытался за последние дни разбить данные на группы «дата», «время», «имя», «сообщение».
Мне удалось выяснить, что регулярное выражение
(.)(\d+\.\d+\.\d+)(,)(\s)(\d+:\d+:\d+)(.)(\s)([^:]+)(:)
может захватить все до сообщения (ср .: https://regex101.com/r/hQlgeM/3). Но я не могу понять, как добавить сообщение, чтобы многострочные сообщения были сгруппированы в предыдущее сообщение.
Наконец: если я смогу захватить каждую группу из .txt с помощью регулярных выражений, как я могу фактически передать каждую группу в отдельный столбец. Я смотрел на примеры за последние три дня, но я все еще не могу понятькак окончательно создать этот фрейм данных.
Код, с которым я пытался работать:
df = pd.read_csv('chat.txt', names = ['raw'])
data = df.iloc[:,0]
re.match(r'\[([^]]+)\] ([^:]+):(.*)', data)
Еще одна попытка, которая не сработала:
input_file = open("chat.txt", "r", encoding='utf-8')
content = input_file.read()
df = pd.DataFrame(content, columns = ['raw'])
df['date'] = df['raw'].str.extract(r'^(.)(\d+\.\d+\.\d+)', expand=True)
df['time'] = df['raw'].str.extract(r'(\s)(\d+:\d+:\d+)', expand=True)
df['name'] = df['raw'].str.extract(r'(\s)([^:]+)(:)', expand=True)
df['message'] = df['raw'].str.extract(r'^(.)(?<=:).*$', expand=True)
df