繁体   English   中英

使用可选定界符分割正则表达式

[英]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

空行应为“”

使用此正则表达式匹配所需的数据:

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));
}

正则演示

拆分不适合消除这些波浪线。 您将要用\\1替换~(.*?)~或使用基本检测( charAt )和操作( subString

尚不清楚〜的处理方式,但看起来很简单,只需将两个字符都作为分割字符即可:

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

它实际上忽略了所有〜和^字符。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM