正则表达式匹配两个锚点之间的文本

时间:2014-03-17 06:11:45

标签: java regex

我需要一个仅针对以下示例中列出的项目的RegEx:

The category: 
A short description about the following list:
Item 1, Located at Place 1
Item 2, Located at Place 2
Item 3, Located at Place 3
The next category:

我可以匹配"类别"之后的所有内容。之前"下一个类别:",但我不仅可以获得这些物品。示例描述将从文档更改为文档。

这将与Java一起使用,但如果可能,我更愿意使用纯正则表达式。

我已经在这个工作了几个小时,我把头发拉了出来。非常感谢帮助。

2 个答案:

答案 0 :(得分:1)

假设小描述总是以冒号结尾,并且项目中的字符串中没有其他冒号,您可以使用以下内容:

The category:\\s*[^:]*:\\s*([^:]*)\\s+The next category:

regex101 demo

[^:]*匹配除冒号之外的任何字符。 \\s+用于换行。其余的正则表达式是非常字面的。

答案 1 :(得分:0)

不要使用正则表达式。写一个简单的解析器:

var lines = text.split('\n');

var category     = '',
    categoryLine = 0;

for (var i = 0; i < lines.length; i++) {
    var line = lines[i];
    if (/category:$/.test(line)) {
        // beginning of a new category
        category = line;
        categoryLine = i;
        console.log('BEGIN CATEGORY: ' + line);
    } else if (i == categoryLine + 1) {
        // description line (skip)
    } else {
        // this is an item in a list
        console.log('category="%s" item="%s"',
            category, line);
    }
}

假设:

  • 类别行始终以category:
  • 结尾
  • 每个类别后面都有一个描述行
  • 所有其他行都是项目