[英]Regex to capturing key/values
我有一条命令的输出,该命令基本上在其中列出了一堆键/值对。 输出没有明显的格式,因此我认为正则表达式将是最好的方法。
输出: http : //pastebin.com/Hfu4nP3M
基本上,我需要存储第21-30行的键/值对(逗号分隔)并将它们存储在地图中。
是否可以使用正则表达式来做到这一点?
谢谢。
我不确定这是否是您想要的,但是由于您说过您需要存储第21-30行的键/值对(逗号分隔),因此
{memory,
[{total,38751504},
{processes,13711212},
{processes_used,13711198},
{system,25040292},
{atom,662409},
{atom_used,653371},
{binary,287088},
{code,18209655},
{ets,1358504}]},
我假设您想在存储在[...]
memory
之后读取值。
为此,您可以使用类似
//creating reader to get data from file
BufferedReader in = new BufferedReader(new InputStreamReader(
new FileInputStream("data.txt")));// file with your data
StringBuilder sb = new StringBuilder();
String line = null;
while ((line = in.readLine()) != null) {
sb.append(line.trim());// also remove unnecessary tabulators and
// spaces
}
in.close();
String data = sb.toString();
Pattern pattern = Pattern.compile("\\{memory,\\[(.*?)\\]");
Matcher m = pattern.matcher(data);
if (m.find()) {
Pattern keyValuePattern = Pattern.compile("\\{(\\w*?),(\\d*?)\\}");
Matcher matcher = keyValuePattern.matcher(m.group(1));
while (matcher.find())
System.out.println(matcher.group(1) + "->" + matcher.group(2));
} else
System.out.println("not found");
产量
total->38751504
processes->13711212
...
这可能需要清理-我不经常使用regex,而且从不使用Java。
尝试使用正则表达式:
[{,][^",}]*?[,}]
也就是说:找到等于“ {”或“,”的字符,然后找到不等于“”,“}”或“,”的无限字符,直到找到等于“}”或“,”的字符。
要查找尚未用引号引起来的所有内容,请对其进行匹配。
String s = p.match();
s = s.charAt(0) + '"' + s.substring(1, s.length() - 1) + '"' + s.charAt(s.length() - 1;
然后将其放回日志中的适当位置。 完成所有操作后,可以使用JSON读取日志。
另外,您可能希望将日志记录在内存中,因此更易于操作。
您可以逐行读取输出,直到使用String.equals()找到“ {memory”为止。 然后在以下所有行上
String[] result = line.replaceAll("[\\[\\]}{ \t]|},", "").split(",");
System.out.println(result[0] + "," + result[1]);
if(line.contains("]"))
break;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.