如何用正则表达式分割字符串并保留连续空格块?
解决连续空格块保留的正则分割问题
我来帮你搞定这个分割需求!你之前的正则会把连续空格拆成单个空格元素,是因为\s+的前瞻后顾会匹配每个空格之间的位置,而我们需要的是只在单词和连续空格块的边界处分割,这样就能把连续空格作为一个整体保留下来。
正确的正则表达式写法
你可以用这个正则来实现需求:
(?<=\S)(?=\s)|(?<=\s)(?=\S)
正则逻辑拆解
这个正则通过匹配两种边界位置来分割字符串,每部分的作用如下:
(?<=\S)(?=\s):正向后顾断言确保前面是非空白字符,正向前瞻断言确保后面是空白字符,对应单词结束、空格块开始的分界点|:逻辑或运算符,匹配两种边界情况中的任意一种(?<=\s)(?=\S):正向后顾断言确保前面是空白字符,正向前瞻断言确保后面是非空白字符,对应空格块结束、单词开始的分界点
代码示例
JavaScript 版本
const inputStr = "This is my example "; const splitResult = inputStr.split(/(?<=\S)(?=\s)|(?<=\s)(?=\S)/); console.log(splitResult); // 输出:["This", " ", "is", " ", "my", " ", "example", " "]
Java 版本(注意转义反斜杠)
import java.util.Arrays; public class SplitDemo { public static void main(String[] args) { String inputStr = "This is my example "; String[] splitResult = inputStr.split("(?<=\\S)(?=\\s)|(?<=\\s)(?=\\S)"); System.out.println(Arrays.toString(splitResult)); // 输出:[This, , is, , my, , example, ] } }
这样分割后,连续的空格会被完整保留为一个独立元素,单词也会作为单独的元素,完全符合你的期望结果。
内容的提问来源于stack exchange,提问作者user1589188
相关产品推荐
相关产品推荐

