Как пропустить значения после двоеточия?
Есть TXT-файл из которого через регулярное выражения нужно вывести определённый текст.
Есть два текста:
1. Got character ZDOID from Player : 2556225565:148 - Игрок возродился
2. Got character ZDOID from Player : 0:0 - Игрок умер.
Для того, чтобы вывести текст возрождения использую:
spawn_event = '.*?Got character ZDOID from (\\w+)\\b'
Для смерти (самое простое):
player_death = '.*?Got character ZDOID from (\w+) : 0:0'
Через бесконечный цикл, я проверяю наличие данного текста:
with open(file, encoding='utf-8', mode='rt') as a:
a.seek(0,2)
while True:
i = a.readline()
if(re.search(pdeath, i)):
pname = re.search(pdeath, i).group(1)
print(':coffin: **' + pname + '** только что умер!')
if(re.search(sevent, i)):
player = re.search(sevent, i).group(1)
greeting = ['прибыл на сервер ', 'возродился на сервер ', 'прибыл в мир ', 'приземлился на сервер ']
i = random.choice(greeting)
print('> **{0}** {1}*{2}*'.format(player, i, SERVER))
Когда игрок возрождается, выводиться всё как нужно:
> **Кадгар** приземлился на сервер *Asgard*
Но когда проверяю вывод текста на смерть, выводиться вот что:
:coffin: **Кадгар** только что умер!
> **Кадгар** возродился на сервер *Asgard*
Т. е, чтобы вместо того, чтобы вывелось лишь смерть, выводится и возрождение.
Почему так происходит, вроде вывод дальнейшего текста ограничил \\b.
Ответы (1 шт):
\b всего лишь матчит границу слова. Но выражение spawn_event всё также будет матчить часть строки строки где игрок умер (конец строки вы же не сравниваете). Так что либо пишите полный регексп на строку от ^ до $. Либо используйте elif в строке if(re.search(sevent, i)): (т.к. ваш pdeath - это по факту более частный случай от sevent, и если он сматчился, то на возрождение даже и проверять не надо).
Или вообще матчить всё универсально, потом анализировать число, и если оно 0:0 - то писать одно, а иначе писать другое.
Вот пример по мотивам вашего кода:
import re
import random
SERVER = "Server"
strings = [
"1. Got character ZDOID from Player : 2556225565:148 - Игрок возродился",
"2. Got character ZDOID from Player : 0:0 - Игрок умер."]
greeting = ['прибыл на сервер ', 'возродился на сервер ', 'прибыл в мир ', 'приземлился на сервер ']
re_player_event = re.compile(r"Got character ZDOID from (?P<player_name>\w+) : (?P<magic_number>\d+:\d+)")
for s in strings:
m = re_player_event.search(s)
if m:
if m["magic_number"] == "0:0":
print(f':coffin: **{m["player_name"]}** только что умер!')
else:
i = random.choice(greeting)
print(f'> **{m["player_name"]}** {i}*{SERVER}*')