Java Regex编号多行列表

时间:2014-05-22 12:56:50

标签: java regex

我想解析一个文档并提取编号列表的每个元素,例如我有这个:

 1. I like to blah
    and blah
 2. But also to blah 
    and blah

我想从列表中提取每个元素,如[1]。 item1的文本,来自item2的文本]我使用了这样的正则表达式" [0-9]。*;"因为我虽然每个列表项目都以;但这并非总是如此。所以我想要一个正则表达式来提取文本,而不是以&#34 ;;"结尾。 这就是我试过的:

String regexLineNumber = "[0-9]..*;";
String[] splitted = inputData.split(regexLineNumber);

2 个答案:

答案 0 :(得分:0)

一般情况下,我会尽量避免使用正则表达式。它们非常低效,在大多数情况下只是用作捷径。在这种情况下,您可以轻松创建BufferedReader并读取每一行以查找特定值。

之类的东西
BufferedReader reader = new BufferedReader(/*instantiate here*/);
int nextNum = 2;
StringBuilder curRecord = new StringBuilder();
String line;
Collection<String> elements = new ArrayList<String>(/*Expected number ??*/);
while ((line = reader.readLine()) != null) {
   if (line.trim().startsWith(nextNum + ".")) {
       elements.add(curRecord.toString());
       curRecord = new StringBuilder();
       nextNum++;
   }
   curRecord.append(line);
}
if (!curRecord.trim().equals("")) {
   elements.add(curRecord.toString());
}

答案 1 :(得分:0)

我建议你使用一个正则表达式,允许句子中间或末尾的数字。

(?<=[\n\r\s]*|^)(\d\.[^\d]*)

另请注意使用matches而非findall