Java读取文件行并仅提取帮助信息

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>

我有文件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><

^\[?(\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