我使用正则表达式从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");
}
}
}
答案 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_]
数字,而您的表达似乎想要考虑空格。