使用java中的regex从字符串中提取特定数字

时间:2016-04-30 06:58:25

标签: java regex string

这是我的字符串

INPUT:

22 TIRES (2 defs)

1 AP(PEAR + ANC)E (CAN anag)

6 CHIC ("SHEIK" hom)

预期输出:

22 TIRES

1 APPEARANCE

6 CHIC

实际输出:

TIRES

APPEARANCE

CHIC

我尝试使用以下代码并获得上述输出。

String firstnames =a.split(" \\(.*")[0].replace("(", "").replace(")", "").replace(" + ",
                        "");

如何随数字一起提取?我不想要在输入“22 TIRES(2 defs)”中的括号之后的数字。我需要输出为“22轮胎”任何帮助都会很棒!!

2 个答案:

答案 0 :(得分:0)

我会使用一个replaceAll函数。

str.replaceAll("\\s+\\(.*|\\s*\\+\\s*|[()]", "");

DEMO

  • \\s+\\(.*,这会匹配空格和以下(字符以及此模式后面的所有剩余字符。因此,您的示例中的(CAN anag)部分已匹配。

  • \\s*\\+\\s*+与前后空格匹配。

  • [()]匹配左右括号。

  • Atlast将所有匹配的字符替换为空字符串。

答案 1 :(得分:0)

我的做法有点不同

String line = "22 TIRES (2 defs)\n\n1 AP(PEAR + ANC)E (CAN anag)\n\n6 CHIC (\"SHEIK\" hom)"; 
String pattern = "(\\d+\\s+)(.*)\\(";
Pattern r = Pattern.compile(pattern);
Matcher m = r.matcher(line);
while (m.find()) {
    String tmp = m.group(1) + m.group(2).replaceAll("[^\\w]", "");
    System.out.println(tmp);
}

<强> Ideone Demo