You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java正则匹配含换行的#开头信息块并存入数组问题咨询

问题原因

你当前使用的正则#(.*)配合Pattern.MULTILINE模式时,默认.不匹配换行符,因此只会捕获#开头的单行内容,无法拿到后续的年龄、技能行。


解决方案

方案1:使用排除字符集(最简单,无需额外模式)

直接用[^#]匹配所有非#的字符(天然包含换行符),正则写为#[^#]+,示例代码如下:

String regex = "#[^#]+";
List<String> matches = Pattern.compile(regex)
        .matcher(raw)
        .results()
        .map(MatchResult::group)
        .map(String::trim) // 可选:去除每个块末尾的多余空行
        .collect(Collectors.toList());

方案2:开启DOTALL模式配合预查

如果需要更精准的边界控制,可以开启Pattern.DOTALL让.支持匹配换行符,配合正向预查匹配到下一个块开头或文本结束为止:

// \R 匹配任意类型的换行符,\Z 匹配整个文本的结束位置
String regex = "#.*?(?=\\R#|\\Z)";
List<String> matches = Pattern.compile(regex, Pattern.DOTALL)
        .matcher(raw)
        .results()
        .map(MatchResult::group)
        .map(String::trim)
        .collect(Collectors.toList());

输出结果

两种方案最终得到的matches列表都包含3个元素,每个元素对应完整的人员信息块,示例:

#John
age: 25
skill: boxer

内容的提问来源于stack exchange,提问作者Joona Ritva

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 03:06:08