【发布时间】:2017-10-17 02:02:39
【问题描述】:
我有一个文本文件作为 java 字符串。正文的结构如下。我需要解析以名称“子句”开头的每个部分。此示例中包含三个子句。因此,在解析之后,我应该得到三个字符串,每个字符串都以一个子句开头并一直持续到它遇到下一个子句,但不包含它。以下正则表达式给了我类似的东西,但它有多个缺陷。首先,它包含下一节中的“条款”一词。它也省略了最后一个子句。最糟糕的是,在每次迭代中它都会重复所有子句:
for(int i = 0; i < clauseCount - 1; i++) {
String p2 = "(Clause(.*)Clause)";
Pattern pattern2 = Pattern.compile(p2, Pattern.DOTALL);
Matcher matcher2 = pattern2.matcher(extractedText);
if(matcher2.find()){
System.out.println("Matched: " + matcher2.group());
}
}
这是包含三个子句的示例文本。但是有多个文件,每个文件中的子句数量不同。能否请你帮忙?非常感谢您的反馈。
标题放在这里
这里有一些文字:
第 1 条如下:
这里还有一些文字。后面的文字可能会在此处的文字中一次或多次包含名称clause。
Clause 2. 更多文字(后面的文字也可能包含一次或多次的名称clause。):
(1) 这里有一些文字;
(2) 这里有一些文字;
(3) 这里有一些文字;
第 3 条。 此处为新条款的文本。下面的文字可能会或可能不会在其中包含一次或多次的名称clause。:
(1) 这里有一些文字;
(2) 这里有一些文字;
(3) 这里还有一些文字;
(4) 这里有一些文字;
(5) 和数字文本可以继续;
(6) 并可能指代其他数字,例如:(3) 和 (4)。
通知于(此处的某个日期)
(这是签名)
【问题讨论】:
-
我不明白你的输出是什么。请添加您希望从您的示例中得到什么。
-
看看这个来迭代你的匹配stackoverflow.com/questions/16817031/…
-
请注意
Matcher.group()是整个匹配行而不是任何组,因此它在开头包含单词Clause。