通过使用Regex打开文件来解析字符串行

时间:2011-11-18 05:51:46

标签: java regex

这是我打开的以下文本文件(log.txt),需要使用正则表达式匹配每一行。

Jerty|gas|petrol|2.42 
Tree|planet|cigar|19.00
Karie|entertainment|grocery|9.20

所以我写了这个正则表达式,但没有匹配。

public static String pattern = "(.*?)|(.*?)|(.*?)|(.*?)";
    public static void main(String[] args) {
        File file = new File("C:\\log.txt");
        try {
            Pattern regex = Pattern.compile(pattern);
            Scanner scanner = new Scanner(file);
            while (scanner.hasNextLine()) {
                String line = scanner.nextLine();
                Matcher m = regex.matcher(line);
                if(m.matches()) {
                    System.out.println(m.group(1));
                }

            }
        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

任何建议都将受到赞赏。

2 个答案:

答案 0 :(得分:4)

|是一个特殊的正则表达式符号,表示'或'。所以,你必须逃脱它。

public static String pattern = "(.*?)\\|(.*?)\\|(.*?)\\|(.*?)";

答案 1 :(得分:4)

您可以为此大大简化正则表达式。由于数据看起来是管道分隔的,因此您应该只分割管道字符。您最终会得到一系列字段,您可以根据需要进一步解析:

String[] fields = line.split("\\|");