Разделение строк на основе регулярных выражений в Java - PullRequest
3 голосов
/ 18 марта 2019
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 ]

4 голосов
/ 18 марта 2019

Ваше регулярное выражение должно быть таким:

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

с негативным взглядом сзади, демо: https://regex101.com/r/2k1WI5/1/

Ваше текущее регулярное выражение [^<]/ будет соответствовать практически любому символу, который не <, за которым следуют / даже \n, пробел и японские символы.

Вот почему вы теряете некоторые буквы, так как они считаются частью разделителя.

Следуя Четвертой рекомендации , вы можете даже упростить регулярное выражение до: ([;:]|(?<!<)/)

3 голосов
/ 18 марта 2019

[^<]/ будет соответствовать e/ и t/

используйте взамен lookbehind, он будет иметь желаемое поведение, чтобы рассматривать / только как разделитель, если это не закрывающий тег

Вкл. regex101.com

(?<!<)/

Целое регулярное выражение

(;|:|(?<!<)/)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...