我正在尝试编写一个正则表达式,可以正确地解析这些可能的语音命令来设置警报,例如:
第1组:
在下午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组.29-30 3
第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
目前,我可能只是单独使用这两个,并通过查找不同的关键字来确定合适的一个。