Нужна помощь в извлечении выражения из журнала с использованием регулярных выражений в Java - PullRequest
0 голосов
/ 16 января 2019

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

String = "Повторная попытка по ошибке: [[\" billing \ ", \ {u'non_field_errors ': [u'Неверный платежный адрес электронной почты при условии ']} \ "]]"

Мне нужно извлечь сообщение об ошибке

Предоставлен неверный адрес электронной почты для оплаты

Как я могу извлечь это, используя регулярные выражения?

Я попробовал шаблон Retrying for error: (\\.+), но он не работает:

String pattern = "Retrying for error: (\\.+)";
Pattern r = Pattern.compile(pattern);
Matcher m = r.matcher(unescapedStr);
if (m.find()) {
  error = m.group(1);
}

Как я могу получить ожидаемый результат?

Предоставлен неверный адрес электронной почты для оплаты, Фактический: ноль

Ответы [ 2 ]

0 голосов
/ 16 января 2019

Вы можете использовать следующее регулярное выражение:

Retrying for error:.*\[u'([^']+)

См. Демоверсию regex .

Детали

  • Retrying for error: - буквальная подстрока
  • .* - любые 0+ символов, кроме символов разрыва строки, как можно больше
  • \[u' - подстрока [u'
  • ([^']+) - Группа захвата # 1 (matcher.group(1) значение): 1+ символов, отличных от '.

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

String unescapedStr = "Retrying for error: [[\"billing\",\\{u'non_field_errors': [u'Invalid payment email provided']}\"]]";
String pattern = "Retrying for error:.*\\[u'([^']+)";
Pattern r = Pattern.compile(pattern);
Matcher m = r.matcher(unescapedStr);
if (m.find()) {
  System.out.println(m.group(1));
}
// => Invalid payment email provided
0 голосов
/ 16 января 2019

вам не нужно использовать регулярные выражения. как насчет этого

        String x = "Retrying for error: [[\"billing\",\\{u'non_field_errors': [u'Invalid payment email provided']}\"]]";

        String c = x.replace("Retrying for error: ","");

        String g = c.substring(c.lastIndexOf('[')+1);

        String v = g.substring(0, g.indexOf(']'));

        System.out.println(v);

это печатает

u'Invalid payment email provided'

теперь ваши журналы имеют несколько экземпляров Retrying for error:? также делает это

"Retrying for error: [[\"billing\",\\{u'non_field_errors': [u'Invalid payment email provided']}\"]]";

представляет одну строку в ваших журналах?

Основная идея такова: Если каждая строка в вашем файле журнала имеет только один экземпляр Retrying for error:, то вы можете легко анализировать журнал по одной строке за раз и итеративно удалять ненужные данные.

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