Java中基于正则表达式的字符串拆分

时间:2019-03-18 12:36:16

标签: java regex

String delimiterRegexp = "(;|:|[^<]/)";
String value = "get/time/pick me <i>Jack</i>";
String[] splitedTexts = value.split(delimiterRegexp);
for (String text : splitedTexts) {
System.out.println(text);
}

Output:
ge
tim
pick me <i>Jack</i>

Expected Result: 
get
time
pick me <i>Jack</i>

一个字符将与/一起添加为分隔符。任何人都可以帮我写正则表达式以基于分隔符“ /”分割文本,并且它应该忽略xml结束标记“

2 个答案:

答案 0 :(得分:4)

您的正则表达式应如下所示:

(;|:|(?<!<)/)

带有令人反感的外观,演示:https://regex101.com/r/2k1WI5/1/

您当前的正则表达式[^<]/基本上将匹配任何非<的字符,后跟/,甚至\n,空格和日语字符。

这就是为什么您会丢失一些字母,因为它们被视为分隔符的一部分。

按照The fourth bird的建议,您甚至可以将正则表达式简化为:([;:]|(?<!<)/)

答案 1 :(得分:3)

[^<]/将匹配e/t/

取而代之的是,如果不是结束标记,它将仅具有/作为分隔符而具有想要的行为

regex101.com

(?<!<)/

整个正则表达式

(;|:|(?<!<)/)