用于从文本文件中提取一些数据的正则表达式

时间:2014-10-15 17:32:45

标签: java sql regex

我的文字有这种格式的句子:

sentence         1    This is a sentence.
t-extraction     1    This     is       a sentence
s-extraction     1    This_DT    is_V     a_DT sentence_N
sentence         2    ... 

如您所见,这些行由回车键分隔。重复句子 t-extraction s-extraction 字词。这些数字是句号1,2,..这些短语由 Tab 键分隔,例如在第一行:sentence(TAb)1(TAb)This is a sentence. 或在第二行:t-extraction(TAb)1(TAb)This(TAb)is(TAb)a sentence.

我需要在sql表中映射其中的一些信息,所以我应该提取它们。 我需要第一句和第二句(第一行没有句子单词,第二行没有 t-extraction 数字)。每个按Tab分隔的部分将映射到sql中的一个字段中(例如{1}}在一列中,1在一列中,This is a sentence(在第二行中)在一列中,以及Thisis)。

你的建议是什么?提前谢谢。

2 个答案:

答案 0 :(得分:0)

您可以使用String.split()。

您可以使用的正则表达式为[^A-Za-z_]+[ \t]+

答案 1 :(得分:0)

在String上使用split方法可能是关键。 split命令将字符串分成正则表达式匹配的部分,返回匹配之间部分的字符串数组。

您希望匹配标签(或\ t,因为它分隔到)。您还希望将三行作为一个单元处理,下面的代码显示了执行此操作的一种方法(它确实取决于文件格式正确)。

当然你想使用从你的文件创建的阅读器而不是字符串。

public class Test {

    public static void main(String[] args) throws Exception {
        BufferedReader reader = new BufferedReader(new FileReader("/my/file.data"));
        String line = null;

        for(int i = 0; (line = reader.readLine()) != null; i++){
            if(i % 3 == 0){
                String[] parts = line.split("\t");
                System.out.printf("sentence ==> %s\n", Arrays.toString(parts));
            } else if(i % 3 == 1){
                String[] parts = line.split("\t");
                System.out.printf("t-sentence ==> %s\n", Arrays.toString(parts));
            } else {
                String[] parts = line.split("\t");
                System.out.printf("s-sentence ==> %s\n", Arrays.toString(parts));
            }
        }
    }

}