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

Java正则分割含01-45编号文本的技术求助

解决Java正则分割以01-45数字开头文本的问题

需求说明

需要用Java正则分割文本,分割目标是以01至45的数字开头的内容,数字允许带前导零(如04)或不带前导零(如4)。

示例文本

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

期望输出

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

解决方案

根据文本是否包含HTML标签,提供两种实现方案:

方案一:先清理HTML标签再提取条目

如果文本带HTML标签,先去除标签再匹配目标内容,代码如下:

import java.util.ArrayList;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class TextSplitter {
    public static void main(String[] args) {
        String originalText = "<p><strong>09</strong> 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. <strong>37</strong> 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 <strong>42</strong> Supervision services for driving. assistance; systems for railway vehicles; checking railway vehicles; checking railway vehicles that incorporate driver assistance systems</p>";
        
        // 去除所有HTML标签
        String cleanText = originalText.replaceAll("<[^>]+>", "");
        
        // 构造正则:匹配01-45数字开头的条目,非贪婪匹配到下一个目标数字或结尾
        Pattern pattern = Pattern.compile("(0[1-9]|[1-3][0-9]|4[0-5])\\s+.*?(?=(\\s+(0[1-9]|[1-3][0-9]|4[0-5])|$))", Pattern.DOTALL);
        Matcher matcher = pattern.matcher(cleanText);
        
        ArrayList<String> result = new ArrayList<>();
        while (matcher.find()) {
            result.add(matcher.group().trim());
        }
        
        // 按要求格式输出
        for (int i = 0; i < result.size(); i++) {
            System.out.println("index[" + i + "]=" + result.get(i));
        }
    }
}

方案二:直接匹配带HTML标签的目标条目

如果不想提前清理标签,可直接匹配包含<strong>标签的目标内容,再去除标签得到结果:

import java.util.ArrayList;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class TextSplitter {
    public static void main(String[] args) {
        String originalText = "<p><strong>09</strong> 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. <strong>37</strong> 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 <strong>42</strong> Supervision services for driving. assistance; systems for railway vehicles; checking railway vehicles; checking railway vehicles that incorporate driver assistance systems</p>";
        
        // 匹配<strong>包裹的01-45数字及后续文本,直到下一个<strong>数字或结尾
        Pattern pattern = Pattern.compile("<strong>(0[1-9]|[1-3][0-9]|4[0-5])</strong>\\s+.*?(?=(<strong>(0[1-9]|[1-3][0-9]|4[0-5])</strong>|$))", Pattern.DOTALL);
        Matcher matcher = pattern.matcher(originalText);
        
        ArrayList<String> result = new ArrayList<>();
        while (matcher.find()) {
            // 去除HTML标签并整理格式
            String entry = matcher.group().replaceAll("<[^>]+>", "").trim();
            result.add(entry);
        }
        
        // 按要求格式输出
        for (int i = 0; i < result.size(); i++) {
            System.out.println("index[" + i + "]=" + result.get(i));
        }
    }
}

正则说明

  • (0[1-9]|[1-3][0-9]|4[0-5]):精准匹配01-09、10-39、40-45的数字范围
  • \\s+:匹配数字与文本之间的一个或多个空格
  • .*?:非贪婪匹配任意字符,避免过度匹配到后续条目
  • (?=...):正向预查,用于确定条目结束位置(下一个目标数字或文本结尾),不会消耗匹配内容
  • Pattern.DOTALL:让.匹配换行符,兼容带换行的文本

内容的提问来源于stack exchange,提问作者meet patel

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 05:05:25