无法在Java

时间:2016-01-04 02:00:20

标签: java regex

我一直在尝试使用模式匹配器来查找特定模式,并且我已经通过此website创建了正则表达式模式,并且它显示模式位于我想要阅读的文本文件中。

  

额外信息:此代码的工作方式如下:开始阅读文本文件,   当遇到> D10时,进入另一个循环并获取信息直到   下一个>找到D10。循环此过程直到EOF。

我的示例文本文件:

D14*
Y7620D03*
X247390Y66680D03*
X251540Y160150D03*
G01Y136780*
G03X-374970Y133680I3100J0*    
D17*
Y7620D03*
X247390Y66680D03*
X251540Y160150D03*
G01Y136780*
G03X-374970Y133680I3100J0*

我在java中的模式代码:

private final Pattern PinNamePattern = compile("(D[1-9][0-9])\\*");
private final Pattern LocationXYPattern = compile("^(G0[1-3])?(X|Y)(-?[\\d]+)(D0[1-3])?\\*",Pattern.MULTILINE);
private final Pattern LocationXYIJPattern = compile("^(G0[1-3])?X(-?[\\d]+)?Y(-?[\\d]+)?I?(-?[\\d]+)?J?(-?[\\d]+)?(D0[1-3])?\\*",Pattern.MULTILINE);

我在java中的代码:

while ((line = br.readLine()) != null) {
    Matcher pinNameMatcher = PinNamePattern.matcher(line);
    //If found Aperture Name
    if (pinNameMatcher.find()) {
        currentApperture = pinNameMatcher.group(1);
        System.out.println(currentApperture);
        pinNameMatcher.reset();
        //Start matching Location X Y I J     
        //Will keep looping as long as next aperture name not found
        //Second While loop
        while (!(pinNameMatcher.find()) ) {
            line = br.readLine();
            Matcher locXYMatcher = LocationXYPattern.matcher(line);
            Matcher locXYIJMatcher = LocationXYIJPattern.matcher(line);
            LineNumber++;
            if (locXYMatcher.find()) {
                System.out.println("XY FOUND");
                if (locXYIJMatcher.find()) {
                    System.out.println("XYIJ FOUND");
                }
            }

然而,当我使用java阅读时,简单地找不到模式。有什么我错过了或我做错了吗?我已经尝试删除“^”和MULTILINE标志,但仍然找不到模式。

1 个答案:

答案 0 :(得分:0)

你的正则表达式看起来很好,你可能没有正确地搜索它。

String s = "G03X-374970Y133680I3100J0*";
Pattern pattern = Pattern.compile("^(G0[1-3])?X(-?[\\d]+)?Y(-?[\\d]+)?I?(-?[\\d]+)?J?(-?[\\d]+)?(D0[1-3])?\\*");

Matcher m = pattern.matcher(s);
while (m.find()) {
    String s = m.group(0);
    System.out.println(s); // prints G03X-374970Y133680I3100J0*
}

在更新后的代码中,只有在第一个模式匹配时才会查找第二个和第三个模式,这可能不是您想要的。尝试使用它作为基础并改进它:

while ((line = br.readLine()) != null) {
    Matcher pinNameMatcher = PinNamePattern.matcher(line);
    if (pinNameMatcher.find()) {
        currentApperture = pinNameMatcher.group(0);
        System.out.println(currentApperture);
    }

    Matcher locXYMatcher = LocationXYPattern.matcher(line);
    if (locXYMatcher.find()) {
        System.out.println(locXYMatcher.group(0));
    }

    Matcher locXYIJMatcher = LocationXYIJPattern.matcher(line);
    if (locXYMatcher.find()) {
        System.out.println(locXYIJMatcher.group(0));
    }
}