过滤正则表达式的输出

时间:2014-09-14 05:27:38

标签: java regex

我使用正则表达式从txt文件中提取内容。我有两个问题。现在我有一个代码可以为我做正则表达式,但它需要更多的内存。那么我怎样才能改进当前的代码以使用最少的内存。其他问题是我想要文件管理器(获取当前正则表达式结果的一部分)。例如:我当前的代码给出part = 324324234,我想过滤它,只得到数字。要获取部件号,必须使用此正则表达式,现在我想过滤输出。那我怎么能这样做呢。请帮我解决这个问题。任何帮助都会很有帮助。这是我当前的正则表达式代码:

public class RegularExpression_fyp{

    public static void main(String [] argv) throws Exception {
        String pattern = "\\part\\=\\w[0-9 ]+";

        Pattern r = Pattern.compile(pattern);

        FileInputStream input = new FileInputStream("F:\\testing1.txt");
        FileChannel channel = input.getChannel();

        ByteBuffer bbuf = channel.map(FileChannel.MapMode.READ_ONLY, 0, (int) channel.size());
        CharBuffer cbuf = Charset.forName("8859_1").newDecoder().decode(bbuf);

        Matcher matcher = r.matcher(cbuf);

        if (matcher.find()) {
            System.out.println("Found value: " + matcher.group(0));
        }
        else {
            System.out.println("NO MATCH");
        }
    }
}

2 个答案:

答案 0 :(得分:0)

从组索引1获取字符串part=之后的数字。

part\\s*=\\s*([0-9]+)

代码:

String s = "foo bar part= 324324234 foo bar";
Pattern regex = Pattern.compile("part\\s*=\\s*([0-9]+)");
 Matcher matcher = regex.matcher(s);
 while(matcher.find()){
        System.out.println(matcher.group(1));
}

输出:

324324234

答案 1 :(得分:0)

如果您对内存有疑虑,任何使用群组的正则​​表达式都会比不使用内存的内容消耗更多内存。

  

捕获组是将多个角色视为一个单元的一种方法。它们是通过将要分组的字符放在一组括号中来创建的。例如,正则表达式([0-9)创建一个包含0到9之间数字的组。输入字符串中与捕获组匹配的部分将保存在内存中,以便以后通过反向引用进行调用。

你可以通过(?<=part=\s)\d+来实现相同的目标。此版本将匹配使用较少内存的数字相同的结果。

但是,我注意到上面的表达式考虑了数字之间空格的可能性,如果需要表达式需要: (?<=part=\s)[0-9 ]+。另一个重要的事情是在\w匹配\w之后使用[0-9A-Za-z_]数字,而您的表达似乎想要考虑空格。