在Java中使用正则表达式从日志中提取表达式时需要帮助

时间:2019-01-15 22:29:08

标签: java regex

我有一个日志作为字符串,并且我试图从中捕获错误消息。我尝试过的正则表达式无效。

  

String =“重试错误:[[\”帐单\“,\ {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 :(得分:0)

您不必使用正则表达式。怎么样

        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:实例,那么您可以轻松地一次解析日志一行,并反复剥离不需要的内容。

答案 1 :(得分:0)

您可以使用以下正则表达式:

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

请参见regex demo

详细信息

  • Retrying for error:-文字子字符串
  • .*-除换行符以外的任意0+个字符,并且尽可能多
  • \[u'-一个[u'子字符串
  • ([^']+)-捕获组#1(值matcher.group(1)):除'以外的其他1个字符。

请参见Java demo

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