Как пропустить значения после двоеточия?

Есть 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 шт):

Автор решения: GrAnd

\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}*')
→ Ссылка