【问题标题】:Extract a particular number from a string using regex in java在java中使用正则表达式从字符串中提取特定数字
【发布时间】:2016-04-30 06:58:25
【问题描述】:

这是我的字符串

输入:

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 TIRES”任何帮助都会很棒!

【问题讨论】:

  • 为什么需要这样做?

标签: java regex string


【解决方案1】:

我的做法有点不同

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

【讨论】:

    【解决方案2】:

    我会使用一个 replaceAll 函数。

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

    DEMO

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

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

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

    • 最后所有匹配的字符都替换为空字符串。

    【讨论】:

    • 有效!!你能解释一下它是如何工作的吗? @Avinash Raj
    • 你能解释一下代码的具体作用吗@Avinash Raj
    猜你喜欢
    • 2023-04-07
    • 2021-05-24
    • 1970-01-01
    • 1970-01-01
    • 2021-11-09
    • 1970-01-01
    • 2014-10-17
    • 2019-03-13
    • 1970-01-01
    相关资源
    最近更新 更多