如何在使用RegEx时保留分隔符?

Ren*_*ani 7 java regex punctuation separator

我做了一个关于标点符号和正则表达式的问题,但这令人困惑.

我有这样的文字:

String text = "wor.d1, :word2. wo,rd3? word4!"; 
Run Code Online (Sandbox Code Playgroud)

我这样做:

String parts[] = text.split(" ");
Run Code Online (Sandbox Code Playgroud)

我有这个:

wor.d1, | :word2. | wor,d3? | word4!;
Run Code Online (Sandbox Code Playgroud)

有这个我需要做什么?(将符号保留在边界处,但仅限于我指定的:.,!?:,而不是全部).

wor,d1 | , | : | word2 | . | wor,d3 | ? | word4 | !
Run Code Online (Sandbox Code Playgroud)

UPDATE

我用这些正则表达式获得了一些好的结果,但它在一个单词开头的标点符号的所有分割之前给出了一个空的char.

有一种方法可以在一开始没有这个空的char?

这个正则表达式是好的还是有更简单的方法?

public static final String PUNCTUATION_SEPARATOR =
        "("
        + "("
        + "(?=^[\"'!?.,;:(){}\\[\\]]+)"
        + "|"
        + "(?<=^[\"'!?.,;:(){}\\[\\]]+)"
        + ")"
        + "|"
        + "("
        + "(?=[\"'!?.,;:(){}\\[\\]]+($|\n))"
        + "|"
        + "(?<=[\"'!?.,;:(){}\\[\\]]+($|\n))"
        + ")"
        + ")";
Run Code Online (Sandbox Code Playgroud)

Ren*_*ani 0

public static final String PUNCTUATION_SEPARATOR =
    "("
    + "("
    + "(?=^[\"'!?.,;:(){}\\[\\]-]+)"
    + "|"
    + "(?<=^[\"'!?.,;:(){}\\[\\]-]+)"
    + ")"
    + "|"
    + "("
    + "(?=[\"'!?.,;:(){}\\[\\]-]+($|\n))"
    + "|"
    + "(?<=[\"'!?.,;:(){}\\[\\]-]+($|\n))"
    + ")"
    + ")";
Run Code Online (Sandbox Code Playgroud)