Регулярные выражения Python для непрерывного извлечения нескольких фрагментов информации из текстовых данных.Python

Программы на Python
Anonymous
Регулярные выражения Python для непрерывного извлечения нескольких фрагментов информации из текстовых данных.

Сообщение Anonymous »

У меня есть набор данных с столбцом с именем Plain_text, в котором есть журнал разговоров между несколькими пользователями в групповом чате, серверы сохраняют информацию в таком формате:

Код: Выделить всё

a "timestamp" + "user name" + ":" + "text"
Отметка времени может быть заключена в косую черту или круглые скобки или вообще не заключаться, например:

Код: Выделить всё

/8:08:57/
или (14:05:14) или просто 16:59:59
Имя пользователя вводится вручную тем, кто использует сервер, а «текст» — это сообщение, которое человек отправляет, оно может быть настолько длинным или коротким, насколько он хочет, может иметь табуляции, новые строки и т. д.
Это предварительный просмотр только одной ячейки информации в моем наборе данных:

Код: Выделить всё

import pandas as pd

text = """
(19:04:45) Server 526.785 : Ongoing Push
(19:08:46) Main Deck : Operation was not uploaded the error code will be
55-858-658-458

No More Handing is needed
(19:50:46) Server UJI-OP : Reset Deck main
OP may take up to 6 mins or more...
(19:51:46) Server UJI-OP : Main Deck status ON
please stand up for opening doors

23:20:04 Jill : Windows Closed
5:16:58 Carl V: Is someone on the Front door?
(17:11:49) IUJO-66 : No Response on Deck (5:10:43) Van UHJ  : Flights delay 8:34:08 H2047: Buy Concert Tickets 9:05:42 Mark P.: Gen. OK
7:00:15 Jill  : Status not ok updated 21:22:34 YHXO: Front desk clear
"""

df = pd.DataFrame({'plain text': [text]})
Мой желаемый результат выглядит следующим образом:



время
пользователь
text_sent




19:08:46
Основная панель
Операция не была загружена, код ошибки будет 55-858-658-458 Никакой дополнительной обработки не требуется


19:04:45
Сервер 526.785
Текущий push


19:50:46
Сервер UJI-OP
Сбросить основную часть колоды



Базово каждая часть информации будет помещена в отдельный столбец, и мы зафиксируем весь отправленный текст. (Я показал только несколько строк желаемого вывода, чтобы не перегружать экран)
Я использую это регулярное выражение:

Код: Выделить всё

"(?P\d+:\d+:\d+)\S*\s+(?P[^:]+?)\s*:\s*(?P.*?)(?=\s*\S*\d+:\d+:\d+|$)"
Но некоторые сообщения не работают:
Изображение

Некоторые сообщения пропускаются, хотя они соответствуют моему регулярному выражению
Вот регулярное выражение: https://regex101.com/r/G0rdpa/1
Как я могу изменить это, чтобы собирать всю информацию?

Подробнее здесь: https://stackoverflow.com/questions/770 ... informatio

Вернуться в «Python»