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

Java中提取||特殊字符间子串失败,求助解决方案

解决Java正则提取||包裹子串的问题

嘿,我一眼就看出问题出在哪啦!你写的正则"||(.*?)||"里的|是正则表达式的特殊元字符(表示“或”的逻辑),直接这么写的话,正则引擎根本没法正确识别你要匹配的是||这个固定符号,自然就匹配不到任何内容啦。

正确的正则写法

你需要把|转义成\|,而在Java字符串里反斜杠本身也要转义,所以最终的正则应该是:

Pattern pattern = Pattern.compile("\\|\\|(.*?)\\|\\|");

这里的正则逻辑拆解:

  • \\|\\|:匹配固定的||符号(转义后让正则引擎把它当成普通字符处理)
  • (.*?):非贪婪模式匹配两个||之间的任意字符(?确保匹配到下一个||就停止,不会过度匹配多个区间的内容)

完整的Java代码示例

下面是能正确提取所有目标子串的完整实现:

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

public class ExtractSubstrings {
    public static void main(String[] args) {
        String stringToSearch = "About ||PrimarySchool|| % of children in ||Country|| attend primary school. ||SecondarySchoolFemale|| % of girls and ||SecondarySchoolMale|| % of boys finish secondary school. Literacy is ||LiteracyFemale|| % for females and ||LiteracyMale|| % for males.";
        
        // 使用转义后的正确正则
        Pattern pattern = Pattern.compile("\\|\\|(.*?)\\|\\|");
        Matcher matcher = pattern.matcher(stringToSearch);
        
        List<String> extractedStrings = new ArrayList<>();
        while (matcher.find()) {
            // group(1)获取括号内匹配的核心内容(即两个||之间的子串)
            extractedStrings.add(matcher.group(1));
        }
        
        // 输出提取结果
        System.out.println("提取到的子串:");
        for (String s : extractedStrings) {
            System.out.println(s);
        }
    }
}

运行这段代码后,你会得到预期的输出:

提取到的子串:
PrimarySchool
Country
SecondarySchoolFemale
SecondarySchoolMale
LiteracyFemale
LiteracyMale

这样就能完美解决你的问题啦!

内容的提问来源于stack exchange,提问作者Karuna Dande

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:21:20