使用可选的分隔符拆分正则表达式

split regex with optional delimiters

~分隔文本字段~和 ^ 分隔所有字段

正在输入的字符串(字段可以为空)

~01001~^~0100~^~Butter, salted~^~BUTTER,WITH SALT~^~~^~~^~Y~^~~^0^~~^6.38^4.27^8.79^3.87

我目前的分裂

String [] splited = str.split("\^",-1);
        for (String s : splited){
            System.out.println (s);
        }

输出

~01001~
~0100~
~Butter, salted~
~BUTTER,WITH SALT~
~~
~~
~Y~
~~
0
~~
6.38
4.27
8.79
3.87

如何更改正则表达式,使 ~~ 不包含在内? (空字段没问题)

我想要的输出是什么

01001
0100
Butter, salted
BUTTER,WITH SALT


Y

0

6.38
4.27
8.79
3.87

空行应为“”

拆分不适合删除波浪号。您需要将 ~(.*?)~ 替换为 </code> 或使用基本检测 (<code>charAt) 和操作 (subString)

使用这个正则表达式来匹配你想要的数据:

Pattern p = Pattern.compile("~([^~]*)~|([^\^]+)");

并使用 Matcher API.

获取匹配的数据
Matcher m = p.matcher(input);
while (m.find()) {
   System.out.println(m.groupCount() == 2 ? m.grop(2) : m.grop(1));
}

RegEx Demo

尚不清楚如何处理 ~,但将两个字符作为拆分字符似乎很简单:

        String b[] = str.split("[\^~]");

这基本上忽略了所有 ~ 和 ^ 字符。