У меня есть чат, который выглядит следующим образом:
12-09-18 00:31:40 @966 [playerwithoutspaces] to TEAM: Hello all
12-09-18 00:32:11 @966 [playerswith[inname] to ALL: Helloall
12-09-18 00:30:15 @966 [player name with spaces] to ALL: Hello all]
Я пытаюсь получить дату, время, идентификатор, имя, имя пользователя, чат и контент с помощью re.split("""[\s\t](?![^[]*\])""", line, 6)
Но это не совсемРабота.Проблема в том, что если content
содержит [или], он не разделяет строку должным образом.
Итак, результат:
['12-09-18', '00:30:15', '@966', '[player name with spaces] to ALL:\tHello all]', '']
Когда это должно быть:
['12-09-18', '00:30:15', '@966', '[player name with spaces]', 'to', 'ALL:', '\tHello all]']
Я попытался поигратьсяс соответствием] только определенное количество раз, но это не сработало.
Я забыл упомянуть, что контенту предшествует либо табуляция \ t, либо пробел \ s, поэтому он меняется.
Вот код, который был запрошен:
file = open("chatlog.txt", encoding="ANSI")
...
async def main():
for line in file.readlines():
await handle_chatlog_line(line)
async def handle_chatlog_line(line):
print(re.split("""[\s\t](?![^[]*\])""", line, 6))
date, time, ingame_client_id, client_name, irrelevant, chat, content = re.split("""[\s\t](?![^[]*\])""", line, 6)
И он вылетает на 3-й строке в чате, из-за неправильного регулярного выражения и, следовательно, разделения не производящего достаточно элементов.