Регулярные выражения 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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

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