忽略模式的java字符串拆分正则表达式
我有一个源字符串,我想将data
拆分出来:
String source = "data|junk,data|junk|junk,data,data|junk";
String[] result = source.split(",");
上面给出了data|junk, data|junk|junk, data, data|junk
。为了进一步获得数据,我做了以下工作:
for (int i = 0; i < result.length; i++) {
result[i] = result[i].split("\\|")[0];
}
这就是我想要的。我想看看是否可以使用正确的正则表达式在一次拆分中完成:
String[] result = source.split("\\|.*?,");
上面给出了data, data, data,data|junk
,其中最后两个数据没有被分割。你能帮我用正确的正则表达式得到我想要的结果吗
示例字符串:“Ann | xcjiajeaw,Bob | aijife | vdsjisdjfe,Clara,David | rijfidjf”
预期结果:“安,鲍勃,克拉拉,大卫”
# 1 楼答案
您可以将正则表达式更改为“垃圾”,然后在匹配数据时保持匹配:
正则表达式查找单词字符(字母、数字和下划线)并捕获这些字符。然后,它会再次查找具有单词字符的管道符号(转义,以便在正则表达式中没有特殊含义)。此管道加单词字符可以出现任意次数(零到多次)。之后可以是逗号(可选)
这张照片
它还捕获“垃圾”,您可以通过循环中的
m.group(2)
访问它。如果您不想捕获它,请在正则表达式中插入?:
:# 2 楼答案
我提出了以下解决方案:
# 3 楼答案
在字符串中
\\|.*?,
-这将匹配|anynoncommastring,
但这与最后的|rijfidjf
不匹配,因为它不以逗号结尾。因此,为了匹配这一点,使用(,|$)
而不是仅仅使用,
,使regex\\|.*?(,|$)
但是上面的语句不匹配一个单独的逗号,因此将
,
与\\|.*?(,|$)
交替使用,生成最后的正则表达式(\\|.*?(,|$)|,)
模式
(\\|.*?(,|$)|,)
起作用输出: