首页 > 解决方案 > 在 java 中,如何使用正则表达式模式来解析事件名称和两个数字字符串的“Event=Bell,time=9000,rings=5”?

问题描述

长时间的听众,第一次来这里...

我正在使用 Scanner 对象来读取和解析文本文件,并且可以提取事件名称和时间值,但获取环值却让我望而却步。

文本文件:

Event=ThermostatNight,time=0
Event=LightOn,time=2000
Event=WaterOff,time=10000 
Event=ThermostatDay,time=12000
Event=Bell,time=9000,rings=5
Event=WaterOn,time=6000
Event=LightOff,time=4000
Event=Terminate,time=20000
Event=FansOn,time=7000
Event=FansOff,time=8000

我首先用 substr 从每一行中剪掉“Event =”。

之后,我得到具有以下模式的事件名称。这行得通。

"[A-Za-z]+" 

我认为在那之后我应该能够使用下面的模式获取两个数字,但它永远不会从包含该值的一行中获取环值。

"//d+"

我被拖离了我的电脑,所以我没有确切的代码,但我使用的是 java 中可用的标准模式/匹配器工具。

标签: javaregex

解决方案


你可以使用这个正则表达式Event=(.*?),time=(\d+)(,rings=(\d+))?

String regex = "Event=(.*?),time=(\\d+)(,rings=(\\d+))?";
Pattern pattern = Pattern.compile(regex, Pattern.MULTILINE);
Matcher matcher = pattern.matcher(str);
while (matcher.find()) {
    System.out.print(matcher.group(1) + " " + matcher.group(2));
    if (matcher.group(4) != null) {
        System.out.println(" " + matcher.group(4));
    } else {
        System.out.println();
    }
}

输出:

ThermostatNight 0
LightOn 2000
WaterOff 10000
ThermostatDay 12000
Bell 9000 5
WaterOn 6000
LightOff 4000
Terminate 20000
FansOn 7000
FansOff 8000

推荐阅读