我有一串逗号分隔的字符,我正在拆分。但是,其中一些字符可能是逗号。例如:
test = "a,b,c,d,,,e,f,g"
我知道(?<!,),
是“任何逗号前面没有逗号”的正则表达式,而,(?!,)
是“任何逗号后跟逗号”的正则表达式。有人能指出我正确的方向并告诉我如何将这两者结合起来。所需的输出是:
a
b
c
d
,
e
f
g
该程序是用Java编写的,所以如果有人知道特定于Java的函数,那也是可行的。
答案 0 :(得分:1)
在Regex: replace single characters
中解决的类似问题只是合并你拥有的两个正则表达式,因为(?<!,),(?!,)
应该可以解决问题,除非在这个区域中ruby和Java之间存在细微差别。
如果您要删除所有单,
并专门用,,,
替换,
,那么您可以运行搜索并从(?<!,)?,(?!,)
两次删除匹配的字符。
答案 1 :(得分:1)
您可以使用(.)(?:,|$)
代替lookahead / lookbehind。
(?:,|$)
将匹配中间的逗号或最后一个字符的行尾,而(.)
将捕获该字符。
显然,只有在匹配正则表达式时才会起作用,而不是在字符串的split
方法上使用表达式时;在这种情况下,您应该按照建议使用^(?<=,),^(?!=,)
。
答案 2 :(得分: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
输出:
{{1}}
答案 3 :(得分: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));
}
答案 4 :(得分: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]);