hoojpop
@hoojpop

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

Есть 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.
  • Вопрос задан
  • 113 просмотров
Пригласить эксперта
Ответы на вопрос 1
SoreMix
@SoreMix Куратор тега Python
yellow
В принципе, все как и должно быть, текст находится. В spawn_event ищется текст, который будет всегда в строке, вне зависимости от исхода игрока. Лучше сделать поиск по возродился/умер.

sevent = r'from (\w+).+Игрок возродился'
pdeath = r'from (\w+).+Игрок умер'


И чтобы не экранировать бекслеши, есть специальный флаг r, который нужно ставить перед началом строки
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы