我正在为这些模式创建一个正则表达式:
[num] [am]
[num] [pm]
[num] [-] [num]
[num] [:] [num]
带或不带空格
确定句子中是否有时间。理想情况下,它实际上会解析时间。句子就像:
“This event is at 9am at…”
“Blues, 5:30, pressroom..”
“Meet at 5pm!”
“All night 9-8 rockin’ it!”
我的项目是在.NET中,以防它相关。
答案 0 :(得分:1)
我不想拥有一个灵活的正则表达式,而是更喜欢多个正则表达式(一种是你想要匹配的每种类型的模式,最有可能),然后应用每一种,直到你得到一个匹配。请注意,您可以使用此方法来识别模糊的时间规范。
这种方法更易于编码和维护(将来您可能需要更多时间格式,添加新的特定正则表达式而不是修改已经复杂/灵活的正则表达式是微不足道的。)
答案 1 :(得分:1)
根据你的定义,我认为这样的事情和你能做的一样好:
"\\b(1[012]|[1-9])(\\s?(am|pm)|:[0-5][0-9]|-(1[012]|[1-9]))\\b"
这要求一小时在1-12和分钟之间为0-59。它还需要在时间周围的字边界。它不允许在破折号或冒号周围留出空格。
然而,根据定义,你会得到很多误报,特别是你的[num]-[num]
格式,看起来很像日期和其他东西。
经过测试here。我没有找到特定的.NET测试程序,但我认为它都是标准的。
答案 2 :(得分:0)
从“语法”构建正则表达式非常简单,有a look at RegExes!
/(\d{1,2})\s*([:-]\s(\d{1,2})|am|pm)/
我限制你的数字直到2个字符长,你可能会省略,因为你可能会看看时间是否在有效范围内。要解析匹配的字符串,可以从结果中提取匹配的组。