Java正则表达式:移动到字符串中的特定位置

3

我有一些类似这样的字符串:

Title
First
Second
Third

Title 2
First 
Second
Third

我希望能直接跳转到标题2,然后获取第一、第二、第三项内容。我知道如何获取这些内容(使用Pattern/Matcher),但不确定如何跳转到标题2。


请澄清“跳转到标题2”?“标题2”是一个固定的静态字符串吗?还是它总是在空行之后出现? - anubhava
2个回答

1
这个正则表达式将获取'Title 2'以及其下方的三行(如您所需),并将它们放入匹配组中。您可以使用Pattern / Matcher读取匹配的组。
Title 2\n(.*)\n(.*)\n(.*)

希望这有所帮助!

1
您可以使用String#split方法(这里是 javadoc),并使用换行符\\n将文本拆分成行,遍历结果数组中的字符串表示形式的行,收集它们,例如,在某些对象表示法中,如一些具有副标题的Title对象列表中。每个空行后创建一个新标题。类似这样:
String[] lines = str.split("\\n");

List<List<String>> titles = new LinkedList<>();

List<String> title = new LinkedList<>();
titles.add(title);
for (String line : lines) {
    if (line.trim().isEmpty()) {
        title = new LinkedList<>();
        titles.add(title);
        continue;
    }

    title.add(line);
}

System.out.println(titles.get(1));

如果这对您没有效果,您需要查看非捕获组的正则表达式运算符(?:)。您可以在某些模式中使用它来确定您的Title 2是否紧接着一个空行(该空行用于非捕获组)。然后只需指定要从文本中接收的组即可。

@Mariano 是的,但如果情况是没有单独的\n而是\r\n或者空行包含空格呢?当然,可以将所有这些情况合并到单个模式中,但为此我们需要知道给定字符串的格式。 - Stanislav
@Mariano 谢谢,好的解决方案,但是,\\R{2,} 的问题在于,你只会得到两个字符串,每个字符串都包含组中的所有值,但这可能不是预期的结果,你需要再次拆分它们。这取决于拆分后如何处理这些值的方式。 - Stanislav

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接