java正则表达式提取带边界和可选空间的数字

时间:2013-08-01 03:48:46

标签: java regex

我想提取12和15。

AB CD 12 ABC/15 DEF
.*\bAB CD\b\s?(\d+)\s?\bABC\b[/](\d+)\s?\bDEF\b

它不起作用,因为我不确定如何匹配确切的单词。我试图使用边界来匹配确切的单词,这似乎是在创造一个问题。

我试过

.*\\bAB CD\\b\\s?(\\d+)\\s?\\bABC\\b[/](\\d+)\\s?\\bDEF\\b
.*\\bAB CD\\b\\s*(\\d+)\\s*\\bABC\\b[/](\\d+)\\s*\\bDEF\\b
.*\\bAB CD\\b[\\s]?(\\d+)[\\s]?\\bABC\\b[/](\\d+)[\\s]?\\bDEF\\b
.*\\bAB CD\\b[\\s]*(\\d+)[\\s]*\\bABC\\b[/](\\d+)[\\s]*\\bDEF\\b

感谢。

4 个答案:

答案 0 :(得分:1)

除了表达有点多余之外,你必须做错事,因为你的第一个表达式有效:

import java.util.*;
import java.util.regex.*;
import java.lang.*;
 
class Main {
    public static void main (String[] args) throws java.lang.Exception {
        
        String currentLine = "AB CD 12 ABC/15 DEF";
        System.out.println("Current Line: "+ currentLine);
        Pattern p = Pattern.compile(".*\\bAB CD\\b\\s?(\\d+)\\s?\\bABC\\b[/](\\d+)\\s?\\bDEF\\b");
        Matcher m = p.matcher(currentLine);
        while (m.find()) {
            System.out.println("Matched: "+m.group(1));
            System.out.println("Matched: "+m.group(2));
        }
        
    }
}

以及证明:http://ideone.com/0tXFNu

的演示链接

输出:

Current Line: AB CD 12 ABC/15 DEF
Matched: 12
Matched: 15

因此,请务必使用m.group(NUMBER)访问每个匹配的值。

答案 1 :(得分:0)

您可以使用:

"AB\\s*CD\\s*(\\d+)\\s*ABC/(\\d+)\\s*DEF"

答案 2 :(得分:0)

你想要的只是从字符串中提取数字,尝试下面的代码:

Pattern p = Pattern.compile("\\d+");
Matcher m = p.matcher("AB CD 12 ABC/15 DEF");
while (m.find()) {
    System.out.println(m.group());
}

如果你想要字符串匹配,除了数字:

Pattern p = Pattern.compile("AB\\s+CD\\s+(\\d+)\\s+ABC/(\\d+)\\s*DEF");
Matcher m = p.matcher("AB CD 12 ABC/15 DEF");
if (m.find()) {
    System.out.println(m.group(1));
    System.out.println(m.group(2));
}

答案 3 :(得分:0)

.*\bAB CD\b\s?(\d+)\s?\bABC\b[/](\d+)\s?\bDEF\b
                           ^^^        ^^ you dont need these \b