Как мне извлечь имя пользователя из строки? - PullRequest
1 голос
/ 09 мая 2020

Я использовал этот код, который я написал некоторое время назад для моего бота Discord в Java:

Pattern pattern = Pattern.compile("\\/setNickname ([^\\s]+)");
        Matcher matcher = pattern.matcher(messageReceivedEvent.getMessage().getContentRaw());

        boolean foundMatch = matcher.find();
        if (foundMatch && matcher.groupCount() > 0) {
            String discordUserId = messageReceivedEvent.getAuthor().getId();
            String extractedName = matcher.group(1);

Чтобы изменить псевдонимы на основе текста, который пользователь вводит в канал в формате : [HH:MM:SS] /setNickname Bill

Этот код работает правильно. Однако теперь я хочу изменить его, но мне кажется, что я не могу заставить шаблон регулярного выражения работать с новым форматом сообщения. Это всегда сообщение, которое игрок должен вводить с отметкой времени, поэтому запись будет выглядеть следующим образом: [HH:MM:SS] Bill 4cYaUTKzT2odRf2

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

Ввод будет: [HH:MM:SS] Bill 4cYaUTKzT2odRf2

Результат должен быть просто: Bill

Любая помощь будет принята с благодарностью!

Ответы [ 2 ]

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

Может быть, во входных данных больше вариаций, чем вы указали, но разве это не сработает:

String input = "[HH:MM:SS] Bill 4cYaUTKzT2odRf2";
String extractedName = input.replaceAll(".+\\s([A-Za-z]+)\\s.+", "$1");
System.out.println(extractedName);

Выход:

Bill
0 голосов
/ 09 мая 2020

Используйте этот REGEX ([A-Z:\\[\\]]+\\s)([A-Za-z]+)(\\s[0-9A-Za-z]+)

    public static void main(String[] args) {
        String input = "[HH:MM:SS] Bill 4cYaUTKzT2odRf2";
        Pattern pattern = Pattern.compile("([A-Z:\\[\\]]+\\s)([A-Za-z]+)(\\s[0-9A-Za-z]+)");
        Matcher matcher = pattern.matcher(input);
        if (matcher.find()) {
            System.out.println(matcher.group(2));
        }
    }

, вывод

Bill

или REGEX ([0-9:\\[\\]]+\\s)([A-Za-z]+)(\\s[0-9A-Za-z]+)

    public static void main(String[] args) {
        String input = "[10:30:10] Bill 4cYaUTKzT2odRf2";
        Pattern pattern = Pattern.compile("([0-9:\\[\\]]+\\s)([A-Za-z]+)(\\s[0-9A-Za-z]+)");
        Matcher matcher = pattern.matcher(input);
        if (matcher.find()) {
            System.out.println(matcher.group(1));
            System.out.println(matcher.group(2));
            System.out.println(matcher.group(3));
        }
    }
...