首页 > 解决方案 > 通过正则表达式解析语音激活警报的时间

问题描述

我正在尝试编写一个正则表达式,它可以正确解析尽可能多的这些可能的口头命令来设置警报,例如:

第一组:

设置下午 3:50
的闹钟 设置明天凌晨 3:50
的闹钟 设置早上 6 点
的闹钟 设置 3 点的闹钟

第 2 组:

在 1 小时 10 分钟内
设置闹钟 在 59 分钟内
设置闹钟 在 6 小时 内设置闹钟

第 3 组:

从现在起在 3 个刻钟后
设置闹钟 在 2 个半小时内
设置闹钟 在半 小时内设置闹钟

此表达式适用于第 1 组:

(\D)+(\d+)(?::)?(\d+)?(?: )?(a\.m\.|p\.m\.)?(.+)

https://regex101.com/r/H6z5NU/3

设置明天下午 3 点的闹钟
第 1 组。28-29
第 2 3
组。29-30 第 5 组。31-35 p.m.

设置明天下午 3:50 的闹钟
第 1 组 28-29
第 2 组 29-30 3
第 3 组 31-33 50
第 5 组 34-38 p.m.

该表达式适用于第 2 组:

(\D)+(\d+){1,2}( hour| minute)((\D)+(\d+){1,2}( minute))?(.+)?

https://regex101.com/r/3yt7tK/1

在 20 小时 1 分钟内设置闹钟第 1
组 15-16
第 2 组 16-18 20
第 3 组 18-23 hour
第 4 组 23-37 s and 1 minute
第 5 组 28-29
第 6 组 29-30 1
第 7 组 30- 37 minute

在 1 分钟内设置闹钟第 1
组。15-16
第 2 组。16-17 1
第 3 组。17-24 minute

但我正在让自己发疯,试图获得可以处理上午/下午小时/分钟组合的秘方。

附录:我已经使用各种工具(例如 vanilla python - 没有 ML 导入)构建了自己的识别解析器,它已经成功处理了几个任务......只是试图添加一个警报设置任务并希望获得一些正则表达式帮助。谢谢!

===========又一次更新===========

此表达式适用于第 1 组:

(\D+)(noon|midnight|\d{1,2})(?::(\d{0,2})| o'clock)?(?: )?(p.m.|a.m.|noon|midnight)?

https://regex101.com/r/H6z5NU/5

并且还处理“中午12点”或“午夜”

而且...这个表达式适用于第 2 组和第 3 组:

(\D)?(\d){0,2}(?: )?(and a )?(hour|minute|quarter|half)((\D)+(\d+){0,2}(?: )?(minute|hour))?(.+)?

https://regex101.com/r/3yt7tK/2

现在,我可能只是分别使用这两个,并通过寻找不同的关键字来确定合适的一个。

标签: regexvoice-recognition

解决方案


推荐阅读