0

我有一串逗号分隔的字符,我正在拆分。但是,其中一些字符可能是逗号。例如:

test = "a,b,c,d,,,e,f,g"

我知道这(?<!,),是“任何逗号前面没有逗号”,(?!,)的正则表达式,并且是“任何逗号后面跟着一个逗号”的正则表达式。有人可以指出我正确的方向并告诉我如何将这两者结合起来。所需的输出是:

a  
b  
c  
d  
,  
e  
f  
g  

该程序是用 Java 编写的,所以如果有人知道 Java 特有的函数,那也可以。

4

5 回答 5

1

Regex中解决的类似问题:替换单个字符

只需合并您拥有的两个正则表达式,就(?<!,),(?!,)可以做到这一点,除非 ruby​​ 和 Java 在这方面存在细微差别。

如果要删除所有单个,并专门替换,,,,,则可以运行搜索并从(?<!,)?,(?!,)两次中删除匹配的字符。

于 2013-01-08T01:58:15.033 回答
1

您可以使用(.)(?:,|$)而不是前瞻/后视。

(?:,|$)将匹配最后一个字符之间的逗号或行尾,而(.)将捕获该字符。

显然,这仅在您与正则表达式匹配时才有效,而不是在您使用字符串split方法上的表达式时;在这种情况下,您应该按照您的建议使用^(?<=,),^(?!=,).

于 2013-01-08T02:13:54.860 回答
1

,只有在没有,之前或之后的情况下才能拆分。

    String str = "a,b,c,d,,,e,f,g";
    String regex = "(?<!,),|,(?!,)";

    for(String s : str.split(regex)) {            
        System.out.println(s);
    }

输出:

a
b
c
d
,
e
f
g
于 2013-01-08T02:58:58.370 回答
0

以下将找到一个字符后跟一个逗号,然后通过仅取第一个字符来删除最后一个逗号:

        String test = "a,b,c,d,,,e,f,g";
        Pattern p=Pattern.compile(".,|.$");
        Matcher m=p.matcher(test);
        while(m.find() ){                    
            System.out.println(m.group().charAt(0));
        }
于 2013-01-08T02:10:44.867 回答
0

假设对于数据"a,b,c,d,,,,,e,f,g"拆分应该看起来像a b c d , , e f g您可以找到一对昏迷并在它们之间放置一些特殊标记。这样你就会知道,带有特殊标记的昏迷需要被移除,而带有特殊标记的昏迷需要保留。基于该想法的代码看起来像

String data = "a,b,c,d,,,,,e,f,g";
data = data.replace(",,", ",XspecialSplitX,");

String[] tokens = data.split(",XspecialSplitX|(?<!XspecialSplitX),");
for (String s : tokens)
    System.out.print(s+" ");

输出:a b c d , , e f g


没有正则表达式的更快更简单的方法。
如果您的字符串仅包含用逗号分隔的单个字符,那么所有想要的字符都将具有偶数索引并且分隔逗号奇数。在这种情况下,您需要做的就是像这样遍历所有偶数索引

char[] data="a,b,c,d,,,e,f,g".toCharArray();
for(int i=0; i<data.length; i+=2)
    System.out.println(data[i]);
于 2013-01-08T02:35:50.370 回答