Извлечь несколько токенов из пути JSON с помощью Regex - PullRequest
1 голос
/ 09 апреля 2019

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

data.orderType.`order.created.time`

Сейчас я использую следующее регулярное выражение для токенизации этой строки.

`(.*?)`|[^.]+

Это регулярное выражение частично маркирует строку и выдает токены как

data,orderType,`order.created.time`

проблема здесь в том, что когда токены берутся, обратный удар также включается. Как я могу сбросить обратную галочку и просто получить следующее?

data,orderType,order.created.time

1 Ответ

2 голосов
/ 09 апреля 2019

Вы уже захватили часть между обратными галочками, просто захватите matcher.group(1), если он участвовал в матче (=, если он соответствовал):

Демонстрация Java :

String s = "data.orderType.`order.created.time`";
String regex = "`([^`]*)`|[^.`]+";
List<String> result = new ArrayList<>();
Matcher m = Pattern.compile(regex).matcher(s);
while (m.find()) {
   if (m.group(1) != null) {
       result.add(m.group(1));
   } else {
       result.add(m.group());
   }
}
System.out.println(result);
// => [data, orderType, order.created.time]

Примечание. Я также добавил обратную черту в класс отрицанных символов, [^.`]+, так как я предполагаю, что обратные галочки могут быть только парными.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...