如何使用Java String.split()分割含无空格<>标签的字符串并保留括号
解决方案
可用正则表达式
仅需用以下由零宽断言组成的正则作为split参数即可实现需求,适配所有支持环视断言的编程语言:
// JavaScript 写法 const splitRegex = /(?=<\S+?>)|(?<=<\S+?>)/
// Java 等需要转义反斜杠的语言写法 String splitRegex = "(?=<\\S+?>)|(?<=<\\S+?>)";
使用示例
以JavaScript为例:
// 尖括号内无空格的输入 console.log("This and <those> are.".split(splitRegex)); // 输出:["This and ", "<those>", " are."] // 尖括号内有空格的输入 console.log("This and <hey there> are.".split(splitRegex)); // 输出:["This and <hey there> are."]
逻辑说明
该正则不会匹配任何实际字符,仅定位需要分割的边界位置:
(?=<\S+?>):正向肯定预查,匹配<左侧的位置,要求该<到后续最近的>之间全为非空白字符(无空格)(?<=<\S+?>):反向肯定预查,匹配>右侧的位置,要求该>和前面对应的<之间全为非空白字符- 两个断言用
|组合后,分割时就会把内部无空格的<>标签完整独立为单独元素,不符合条件的<>不会触发分割,保持原字符串结构。
内容的提问来源于stack exchange,提问作者ProfessorCool
相关产品推荐
相关产品推荐

