Извлечь часть строки между двумя специальными символами в Java - PullRequest
0 голосов
/ 22 мая 2018
String stringToSearch = "About ||PrimarySchool|| %  of children in ||Country|| attend primary school. ||SecondarySchoolFemale|| % of girls and ||SecondarySchoolMale|| % of boys finish secondary school. Literacy is ||LiteracyFemale|| % for females and ||LiteracyMale|| % for males.";

Мне нужна дополнительная строка между двумя специальными символами, такими как ||anystring||, но она не работает.Я пытался использовать Pattern-Matcher из Java, но он не работает - он возвращает пустой массив.

Я пытался следовать Java - Извлечь часть строки между двумя специальными символами .

Pattern pattern = Pattern.compile("||(.*?)||");

Ответы [ 2 ]

0 голосов
/ 22 мая 2018

Вам нужно сбежать |

String stringToSearch = "About ||PrimarySchool|| %  of children in ||Country|| attend primary school. ||SecondarySchoolFemale|| % of girls and ||SecondarySchoolMale|| % of boys finish secondary school. Literacy is ||LiteracyFemale|| % for females and ||LiteracyMale|| % for males.";
Pattern pattern = Pattern.compile("\\|\\|([^|]*)\\|\\|");
Matcher matcher = pattern.matcher(stringToSearch);
while (matcher.find()) {
    System.out.println(matcher.group(1));
}

Результат:

PrimarySchool
Country
SecondarySchoolFemale
SecondarySchoolMale
LiteracyFemale
LiteracyMale
0 голосов
/ 22 мая 2018

Это происходит потому, что символ | имеет специальное значение в регулярном выражении, поэтому вы должны экранировать его, используя символ \.См. Демонстрацию в Regex101 .

Более того, в Java вы должны экранировать этот символ с двойной обратной косой чертой \\.

Pattern pattern = Pattern.compile("\\|\\|(.*?)\\|\\|");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...