Regex, чтобы разделить на разделитель - PullRequest
1 голос
/ 26 октября 2011

У меня есть следующая строка:

;Spe \,\:\; cial;;;

, и я хочу разделить ее точкой с запятой в качестве разделителя, однако точку с запятой, начинающуюся с "\", не следует считать разделителем.Поэтому я хотел бы получить что-то вроде

["", "Spe \,\:\; cial", "", "", ""]

Обновление:

Представление Java выглядит следующим образом:

String s = ";Spe \\,\\:\\; cial;;;";

Ответы [ 2 ]

4 голосов
/ 26 октября 2011

Использовать отрицательное оглядывание назад :

(?<!\\\\);

(Обратите внимание, что в этом выражении действительно только один \, т. Е. Выражение должно быть (?<!\);- но символ обратной косой черты должен быть экранирован дважды: один раз в пользу компилятора Java, а затем снова в пользу движка регулярных выражений.)

0 голосов
/ 26 октября 2011

Вы хотите извлечь части, захваченные следующим регулярным выражением: ;?([^;]*)\\\\?; Так что ищите этот шаблон в вашей строке, пока найдено совпадение:

Pattern pattern = Pattern.compile(";?([^;]*)\\\\?;");
Matcher matcher = pattern.matcher(yourString);
List<String> tokens = new ArrayList<String>();
while(matcher.find()){
   tokens.add(matcher.group(1));
}

String[] yourArray = tokens.toArray(new String[0]); // if you prefer an array 
                                                    // rather than a list
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...