Regex - получает содержимое между двумя символами% без совпадений, содержащих пробел - PullRequest
0 голосов
/ 11 октября 2018

Я пытаюсь получить содержимое между двумя символами% без пробела.

Вот что я получил до сих пор: (?<=\%)(.*?)(?=\%)

Теперь я думаю, что мне нужно использовать \Sгде-то.Тем не менее я не могу понять, как его использовать.Всегда есть два случая:

  1. Я все еще получаю все, даже те, у которых есть пробелы
  2. Я не могу найти совпадений

Строка будет выглядеть так:

Заполнитель называется% Test%!Теперь вы можете использовать его с реальными заполнителями.Но если я буду использовать больше заполнителей% Test2%, это больше не будет работать: /.% Test3% сосет причину этого!

Ответы [ 2 ]

0 голосов
/ 11 октября 2018

Если я правильно понимаю ваш вопрос, то просто %(\w+)% сделает это за вас

    String str = "The placeholder is called %Test%! Now you can use it with real placeholders. But if I use more %Test2% placeholders, it won't work anymore :/. %Test3% sucks cause of that!";
    String regex = "%(\\w+)%";//or %([^\s]+)% to fetch more special characters
    Pattern pattern = Pattern.compile(regex);
    Matcher matcher = pattern.matcher(str);
    while (matcher.find()) {
        System.out.println(matcher.group(1));
    }

Вывод:

Test
Test2
Test3
0 голосов
/ 11 октября 2018

Вы можете использовать

(?<=%)[^%\s]+(?=%)

См. Демоверсию regex .Или, если вы предпочитаете захватывать:

%([^%\s]+)%

См. еще одну демонстрацию .

. Часть [^%\s]+ соответствует одному или нескольким символам, которые не являются ни %, ни пробелами..

См. Демонстрационную версию Java :

String line  = "The placeholder is called %Test%! Now you can use it with real placeholders. But if I use more %Test2% placeholders, it won't work anymore :/. %Test3% sucks cause of that!";
Pattern p = Pattern.compile("%([^%\\s]+)%");
Matcher m = p.matcher(line);
List<String> res = new ArrayList<>();
while(m.find()) {
    res.add(m.group(1));
}
System.out.println(res); // => [Test, Test2, Test3]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...