Как получить ожидаемый результат в описании из заданной строки - PullRequest
0 голосов
/ 09 мая 2018

[Подсчет очков]: Бот-16 получил премию 2,0 от [Актер - Убить] [Жертва: Актер200_ (Actor_Local_Minion_200)] [@ 152133]

Как отформатировать вышеуказанную строку, чтобы я получил следующий вывод:

Идентификатор игрока = Bot-16

Очки = 2,0

Действие = [Actor-Kill]

Жертва = Actor200_ (Actor_Local_Minion_200)

Метка времени = 152133

Также некоторые строки не имеют тег жертвы, как в следующей строке

[Оценка]: 2 Dev 158744780 получил 20,0 наград от [Актер - Убить] [Ace] [@ 519382]

И вывод должен быть

ID игрока = 2 Dev 158744780

Очки = 20,0

Действие = Убийство актера

Жертва = Ace

Метка времени = 519382

1 Ответ

0 голосов
/ 09 мая 2018

Вы можете использовать регулярные выражения, чтобы справиться с этим.

Глядя на ваши входные строки, я пришел к следующему регулярному выражению:

\[Scoring\]: (.*) got ([^\s]*) bounty from \[([^\]]*)\] \[(?:Victim: )?([^\]]*)\] \[@([^\]]*)\]

ДЕМО ЗДЕСЬ: https://regex101.com/r/e3zuKw/2

Итак, это демонстрационная программа на Java, и она выводится. Я думаю, что это будет решением для вас.

Выход:

**First Input**
Player-ID = Bot-16
Points = 2.0
Action = Actor - Kill
Victim = Actor200_(Actor_Local_Minion_200)
Timestamp = 152133

**Second Input**
Player-ID = 2 Dev 158744780
Points = 20.0
Action = Actor - Kill
Victim = Ace
Timestamp = 519382

Код:

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Demo {
    public static void main(String[] args) {
        System.out.println("**First Input**");
        printInfo("[Scoring]: Bot-16 got 2.0 bounty from [Actor - Kill] [Victim: Actor200_(Actor_Local_Minion_200)] [@152133]");

        System.out.println("\n**Second Input**");
        printInfo("[Scoring]: 2 Dev 158744780 got 20.0 bounty from [Actor - Kill] [Ace] [@519382]");
    }

    public static void printInfo(String line) {
        String pattern = "\\[Scoring\\]: (.*) got ([^\\s]*) bounty from \\[([^\\]]*)\\] \\[(?:Victim: )?([^\\]]*)\\] \\[@([^\\]]*)\\]";

        Pattern r = Pattern.compile(pattern);
        Matcher m = r.matcher(line);

        if (m.find()) {
            System.out.println("Player-ID = " + m.group(1));
            System.out.println("Points = " + m.group(2));
            System.out.println("Action = " + m.group(3));
            System.out.println("Victim = " + m.group(4));
            System.out.println("Timestamp = " + m.group(5));
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...