如何从字符串中提取用户名?

How do I extract username from string?

我一直在使用我在 Java 中为我的 discord 机器人编写的这段代码:

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

在某些时候我计划以此为基础并将其作为一个变量,因此在第二个 space 之前和之后消除似乎是最合乎逻辑的选择,但我正在努力解决它。

输入为:[HH:MM:SS] Bill 4cYaUTKzT2odRf2

输出应该是:Bill

如有任何帮助,我们将不胜感激!

使用这个正则表达式([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

,或正则表达式 ([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));
        }
    }

也许输入的可变性比您指出的要多,但这行不通:

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

输出:

Bill