如何从字符串中提取用户名?
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
我一直在使用我在 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