Java-将文件分成多个部分

时间:2019-01-28 18:38:34

标签: java regex string file

我正在研究一个项目,以获取文件并保存其部分。 部分可以是

1。

2。

3。

等,但也可以是

1.1

2.3.1.II。

我现在知道如何阅读的基本知识。我需要知道是否有一种很好的方法来检测文本并将其分成几部分。

我考虑过正则表达式,但是我对正则表达式的了解不足。有什么建议吗?

更新

示例:

1. Position
1.1. Position.
1.2. Scope
1.3. Location. 
2. Compensation
2.1. Schedule
2.2. 
3. Term
3.1. Term.
3.1.i. bla
3.1.ii. bla bla

2 个答案:

答案 0 :(得分:1)

您可以像这样用正则表达式匹配标题(假设罗马数字是X的u):

^((?:(?:\d+|I{1,3}|IV|VI{0,3}|IX|X)\.)+)

Demo

说明:

  • ^行首
  • \d+|I{1,3}|IV|VI{0,3}|IX|X-匹配数字:

    • \d+位数字
    • I{1,3}|IV|VI{0,3}|IX|X罗马数字
  • (?:...)非捕获组

  • \.点分隔数字
  • (...)+重复NUMERAL DOT组一次或多次

编辑:

在Java中,您需要转义模式(以便Java正确解释)并使用Pattern.MULTILINE(以便^标记行的开头而不是字符串的开头):

Pattern.compile("^((?:(?:\\d+|I{1,3}|IV|VI{0,3}|IX|X)\\.)+)", Pattern.MULTILINE)

答案 1 :(得分:1)

您可以使用此正则表达式来划分并捕获组1中的编号部分和组2中的段落部分。

^((?:[a-zA-Z\d]{1,2}\.)+)\s+(.*)

在这里,^((?:[a-zA-Z\d]{1,2}\.)+)捕获编号的部分,该部分以一到两个字母数字字符开头,然后是一个或多个整数点。然后是一个空格,因此\s+然后(.*)捕获了假定为段落的其余文本。根据您提供的样本数据,这就是我想出的。如果您需要更多涉及不同情况的案例,请添加更多示例,我们将为您提供进一步完善的解决方案。

Demo

这是示例Java代码,

List<String> list = Arrays.asList("1. Position", "1.1. Position.", "1.2. Scope", "1.3. Location. ",
        "2. Compensation", "2.1. Schedule", "2.2. ", "3. Term", "3.1. Term.", "3.1.i. bla", "3.1.ii. bla bla",
        "12.a. some para", "13.a. some para", "1.a. some para", "A.1.a. another para", "B.1.a. some para");
Pattern p = Pattern.compile("^((?:[a-zA-Z\\d]+\\.)+)\\s+(.*)");

list.stream().forEach(x -> {
    Matcher m = p.matcher(x);
    if (m.matches()) {
        System.out.println(x + " --> " + "number section: ("+m.group(1)+")" + " para section: ("+m.group(2)+")");
    }
});

打印

1. Position --> number section: (1.) para section: (Position)
1.1. Position. --> number section: (1.1.) para section: (Position.)
1.2. Scope --> number section: (1.2.) para section: (Scope)
1.3. Location.  --> number section: (1.3.) para section: (Location. )
2. Compensation --> number section: (2.) para section: (Compensation)
2.1. Schedule --> number section: (2.1.) para section: (Schedule)
2.2.  --> number section: (2.2.) para section: ()
3. Term --> number section: (3.) para section: (Term)
3.1. Term. --> number section: (3.1.) para section: (Term.)
3.1.i. bla --> number section: (3.1.i.) para section: (bla)
3.1.ii. bla bla --> number section: (3.1.ii.) para section: (bla bla)
12.a. some para --> number section: (12.a.) para section: (some para)
13.a. some para --> number section: (13.a.) para section: (some para)
1.a. some para --> number section: (1.a.) para section: (some para)
A.1.a. another para --> number section: (A.1.a.) para section: (another para)
B.1.a. some para --> number section: (B.1.a.) para section: (some para)