【发布时间】:2017-07-14 15:41:44
【问题描述】:
我正在读取日志文件并提取文件中包含的某些数据。我能够提取日志文件每一行的时间。
现在我想提取 id "ieatrcxb4498-1"。所有的 id 都以子字符串 ieatrcxb 开头,我试图查询并基于它返回完整的字符串。
我从其他帖子中尝试了许多不同的建议。但我没有成功,有以下模式:
(?i)\\b("ieatrcxb"(?:.+?)?)\\b
(?i)\\b\\w*"ieatrcxb"\\w*\\b"
^.*ieatrcxb.*$
我还尝试根据以i 开头并以1 结尾的字符串来提取完整的ID。就像他们一样。
日志文件行
150: 2017-06-14 18:02:21 INFO monitorinfo : Info: Lock VCS on node "ieatrcxb4498-1"
代码
Scanner s = new Scanner(new FileReader(new File("lock-unlock.txt")));
//Record currentRecord = null;
ArrayList<Record> list = new ArrayList<>();
while (s.hasNextLine()) {
String line = s.nextLine();
Record newRec = new Record();
// newRec.time =
newRec.time = regexChecker("([0-1]?\\d|2[0-3]):([0-5]?\\d):([0-5]?\\d)", line);
newRec.ID = regexChecker("^.*ieatrcxb.*$", line);
list.add(newRec);
}
public static String regexChecker(String regEx, String str2Check) {
Pattern checkRegex = Pattern.compile(regEx);
Matcher regexMatcher = checkRegex.matcher(str2Check);
String regMat = "";
while(regexMatcher.find()){
if(regexMatcher.group().length() !=0)
regMat = regexMatcher.group();
}
//System.out.println("Inside the "+ regexMatcher.group().trim());
}
return regMat;
}
我需要一个简单的模式来为我做这件事。
【问题讨论】:
-
"一个日志文件并提取文件中包含的某些数据" - 什么样的数据,什么样的日志文件?发布一个例子。
-
@user3734782150: 2017-06-14 18:02:21 INFO monitorinfo : Info: Lock VCS on node "ieatrcxb4498-1" 这是来自日志文件的数据样本。
-
所以你想提取包含 id 的整行?
-
@user3734782 不只是它自己的 id。文件的每一行都有一个 id,并希望从每一行中获取 id。如上所示,我已经用时间完成了。
标签: java regex pattern-matching matcher