java - 在 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 中可用的标准模式/匹配器工具。
解决方案
你可以使用这个正则表达式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
推荐阅读
- javascript - 悬停时 X 轴标签错误
- swift - APNs 通知
- javascript - 我尝试在 cookie 中保存 1 小时,但日期无效
- python - re.sub 匹配后。重复匹配组的所有实例,python
- c# - 为什么空条件运算符会更改常规属性访问?
- f# - F#:配管 vs. 作曲 vs. ......作曲?
- c# - 使用 DirectorySearcher 时如何防止 LDAP 注入
- python - 在 Python 中模拟数据类时如何使用规范
- java - @DataJpaTest 中的存储库初始化为 null
- javascript - 将 Unicode 转换为表情符号的正确方法是什么?