使用正则表达式和java从聊天记录中获取一组数据

时间:2012-03-18 11:50:32

标签: java regex

我正在编写一个Java程序,我必须从聊天日志文件中提取一些数据,以便使用正则表达式进行进一步处理(顺便说一下,我是正则表达式的新手)。聊天日志架构定义如下: [hh:mm:ss] string
但我想提取数据的具体行是以。的形式 [hh:mm:ss]< data1> DATA2 即可。我想提取的数据是hh:mm:ss,data1和data2。 起初,我试图提取更容易使用的时间 的 Pattern.compile(“(\ d {2}:\ d {2}:\ d {2})即可。 我甚至可以使用分别提取数据1  模式p1 = Pattern.compile(“<(。*)>”);这很好。
但是当我尝试通过使用以下正则表达式获得“hh:mm:ss”,data1和data2时 模式p = Pattern.compile(“(\ d {2}:\ d {2}:\ d {2})<(。*)>(。*)”)我有没找到匹配。 那么,对于如何在这种情况下继续实现我的目标,任何人都有一个想法吗?

1 个答案:

答案 0 :(得分:1)

如果你匹配自己的模式,一切都会好的。你忘记了时间的括号: [ hh:mm:ss ] 。见这里:

    String text = "22:44:55 <data quite much> data 2";
    text = text.replaceAll("(\\d{2}:\\d{2}:\\d{2}) <(.*)> (.*)", "replacement");
    System.out.println(text);
    text = "[22:44:55] <data quite much> data 2";
    text = text.replaceAll("(\\d{2}:\\d{2}:\\d{2}) <(.*)> (.*)", "replacement");
    System.out.println(text);

这会产生:

replacement
[22:44:55] <data quite much> data 2

所以第一个字符串匹配,第二个字符串匹配 - 不是。正如预期的那样。

您可能只需要将模式更改为\\[(\\d{2}:\\d{2}:\\d{2})\\] <(.*)> (.*)