
本文介绍如何用 java 正则表达式精准提取以 1–45 内数字(支持 "09" 或 "9" 等格式)开头的条款文本,并将其拆分为结构化字符串数组,避免误切、保留语义完整性。
本文介绍如何用 java 正则表达式精准提取以 1–45 内数字(支持 "09" 或 "9" 等格式)开头的条款文本,并将其拆分为结构化字符串数组,避免误切、保留语义完整性。
在处理标准条款、专利分类号、服务条目等结构化文本时,常遇到类似 09 Software... 37 Installation... 42 Supervision... 的格式——多个条目连续排列,以两位或一位数字编号分隔。若直接用 split("\d+"),会丢失编号信息且可能误切(如将 "driver assistance systems" 中的 1 或 2 当作分隔符)。更稳妥的做法是:先识别并捕获所有合法编号,再基于其位置进行非破坏性分割。
以下为推荐实现方案(兼顾准确性、可读性与鲁棒性):
✅ 核心思路
- 使用正则
(? 进行「零宽断言分割」,即在编号前切割,但不消耗字符; - 更简洁实用的做法:用
Pattern.compile("(? —— 利用(? 确保编号前是非数字字符(避免匹配123中的12),\b保证编号边界清晰,0?[1-9]|1[0-9]|2[0-9]|3[0-9]|4[0-5]精确覆盖 1–45(含前导零如09)。
✅ 完整可运行代码示例
import java.util.*;
import java.util.regex.*;
public class ClauseSplitter {
public static void main(String[] args) {
String text = "09 Software for use in assisted driving of railway vehicles; " +
"software for electronic railway driving assistance systems; " +
"hardware for electronic railway driving assistance systems; " +
"driver assistance systems for railway vehicles. " +
"37 Installation and replacement services for railway vehicles, " +
"railway vehicles that incorporate driver assistance systems in the detection " +
"and avoidance of excessive speed, obstacles, vehicles and people; " +
"Software installation and replacement services for railway driving " +
"assistance systems and vehicle network coordination centers " +
"42 Supervision services for driving. assistance; systems for railway vehicles; " +
"checking railway vehicles; checking railway vehicles that incorporate " +
"driver assistance systems";
// 正则:在 1–45 编号前的零宽位置分割(要求编号前后有合理边界)
String regex = "(? result = new ArrayList();
// 提取每个部分的编号 + 内容(去除开头空格/换行)
for (String part : parts) {
String trimmed = part.trim();
if (!trimmed.isEmpty()) {
// 尝试提取开头编号(用于验证/调试)
Matcher numMatcher = Pattern.compile("^\b(?:0?[1-9]|1[0-9]|2[0-9]|3[0-9]|4[0-5])\b").matcher(trimmed);
if (numMatcher.find()) {
result.add(trimmed); // 保留原始编号和后续内容
}
}
}
// 输出结果(符合题目要求的索引格式)
for (int i = 0; i <h3>⚠️ 注意事项</h3>
-
前导零兼容性:正则
0?[1-9]|1[0-9]|...|4[0-5]明确支持01,09,9,37等形式,不匹配00、46或100; -
边界安全:
\b防止匹配123中的12,(? 避免从字符串开头无前缀处错误触发(如"12 abc"开头可匹配,但"abc12"不会误切); -
空内容防护:
split()可能产生空字符串,务必trim()+isEmpty()过滤; -
性能提示:对超长文本,建议复用
Pattern.compile(...)实例,避免重复编译。
✅ 输出效果(严格匹配题目要求)
index[0]=09 Software for use in assisted driving of railway vehicles; software for electronic railway driving assistance systems; hardware for electronic railway driving assistance systems; driver assistance systems for railway vehicles. index[1]=37 Installation and replacement services for railway vehicles, railway vehicles that incorporate driver assistance systems in the detection and avoidance of excessive speed, obstacles, vehicles and people; Software installation and replacement services for railway driving assistance systems and vehicle network coordination centers index[2]=42 Supervision services for driving. assistance; systems for railway vehicles; checking railway vehicles; checking railway vehicles that incorporate driver assistance systems
该方案兼顾精确性、可维护性与生产可用性,适用于法律条文、IPC 分类、技术规范等编号型文本解析场景。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











