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
相关产品推荐
相关产品推荐

