Java读取文件行并仅提取帮助信息
我有文件file1,file2包含以下内容:Java读取文件行并仅提取帮助信息,java,arrays,regex,list,file,Java,Arrays,Regex,List,File,我有文件file1,file2包含以下内容: [2017-02-01 10:00:00开始运行[error:yes][do:no][finish:[提醒][alarmno:123456789][logno:123456789][ref:-1:2:-1:-1][type:2:发生大问题][flag:0:][/code>
[2017-02-01 10:00:00开始运行[error:yes][do:no][finish:[提醒][alarmno:123456789][logno:123456789][ref:-1:2:-1:-1][type:2:发生大问题][flag:0:][/code><
^\[?(\d[\d-]+).*?\[alarmno:(\w*)].*?\[logno:(\w*)].*?\[type:\w*:([^\]]*)]
见
详细信息:
^
-字符串的开头
\[?
-可选的[
(\d[\d-]+)
-第1组:a数字和1个或多个数字或-
s
*?
-除换行符以外的任何0+字符尽可能少
\[alarmno:
-a[alarmno:
子字符串
(\w*)
-第2组:0+字字符
]
-文字]
*?
-除换行符以外的任何0+字符尽可能少
\[logno:
-文本[logno:
子字符串
(\w*)
-第3组:0+字字符
]
-a]
*?
-除换行符以外的任何0+字符尽可能少
\[类型:
-a[类型:
子字符串]
\w*
-0+字字符
:
-冒号
([^\]]*)
-第4组:0+字符,而非]
]
-a]
:
输出:
Date: 2017-08-17 08:00:00
Name: +AA
Fam: aa
Resident: free
请参阅和一个lite版本,@WiktorStribizew感谢您花时间提供帮助我更喜欢第二个,但我添加了一些小更改,以匹配类型No:digit:中的数字和冒号,并匹配时间,因为我不希望这样。我很好奇你是如何创建正则表达式的,我的修改是随机的,每次我添加的修改都会进行测试。当我读到对不起,这是否意味着我可以发布^\[?(\d[\d-]+).\[alarmno:(\w*)].\[logno:(\w*)].\[type:\w*:([^\]])来理解正则表达式
作为您可以接受的解决方案?@Wasfy:我只能建议您在、通读(以及许多其他指向优秀在线资源的链接)和所谓的社区完成所有课程。A也是一个很棒的网站。谢谢@wiktorstribizuw。
^\[?(\d[\d-]+).*?\[alarmno:(\w*)].*?\[logno:(\w*)].*?\[type:\w*:([^\]]*)]
String s = "[2017-08-17 08:00:00 Comming in [Contact:NO] [REF:] [REF2:] [REF3:] [Name:+AA] [Fam:aa] [TEMP:-2:0:-2:0:-2] [Resident:9:free] [end:0:]";
Pattern pat = Pattern.compile("^\\[*(\\d[\\d: -]+\\d).*?\\[Name:([^]]*)].*?\\[Fam:(\\w*)].*?\\[Resident:\\w*:([^]]*)]");
Matcher matcher = pat.matcher(s);
if (matcher.find()){
System.out.println("Date: " + matcher.group(1));
System.out.println("Name: " + matcher.group(2));
System.out.println("Fam: " + matcher.group(3));
System.out.println("Resident: " + matcher.group(4));
}
Date: 2017-08-17 08:00:00
Name: +AA
Fam: aa
Resident: free