2

好的,我需要一个正则表达式,它将第一个单词捕获到下划线字符,然后捕获可能具有下划线字符的下一个单词。所以,这里是一组和预期的结果:

gear_Armor_Blessed_Robes = "gear", "Armor" and "Blessed_Robes"
gear_Armor_Chain_Coif = "gear", "Armor" and "Chain_Coif"
gear_Armor_Chain_Hauberk = "gear", "Armor" and "Chain_Hauberk"
gear_Armor_Chain_Shirt = "gear", "Armor" and "Chain_Shirt"
gear_Armor_Chain_Leggings = "gear", "Armor" and "Chain_Leggings"
4

2 回答 2

4

无需为此使用正则表达式,只需使用indexOfand substring

String s = "Armor_Blessed_Robes";
int idx = s.indexOf("_");
System.out.println(s.substring(0, idx)); // Armor
System.out.println(s.substring(idx + 1)); // Blessed_Robes

使用正则表达式,您必须使用以下内容,这有点复杂且难以阅读:

Pattern p = Pattern.compile("([^_]+)_(.+)");
Matcher m = p.matcher(s);
if (m.find()) {
  String first = m.group(1);  // Armor
  String second = m.group(2); // Blessed_Robes
}
于 2012-08-26T03:12:49.557 回答
4

您可以沿 拆分_,将拆分数限制为 3:

assert Arrays.equals("gear_Armor_Blessed_Robes".split("_", 3),
    new String[] { "gear", "Armor", "Blessed_Robes" });

它应该为您提供String[]包含String问题中指定的 3 的 a 。

于 2012-08-26T03:13:53.177 回答