-1

我正在寻找为这些模式创建一个正则表达式:

[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 中,以防万一。

4

3 回答 3

1

与其拥有一个灵活的正则表达式,我更喜欢多个正则表达式(最有可能为您想要匹配的每种类型的模式一个),并应用每一个,直到您获得匹配。请注意,您可以使用这种方法来识别不明确的时间规范。

这种方法更容易编码和维护(将来您可能需要更多时间格式,并且添加新的特定正则表达式而不是修改已经复杂/灵活的正则表达式是微不足道的)。

于 2012-12-12T15:07:52.100 回答
1

鉴于您的定义,我认为这样的事情几乎可以做到:

"\\b(1[012]|[1-9])(\\s?(am|pm)|:[0-5][0-9]|-(1[012]|[1-9]))\\b"

这要求一小时在 1-12 之间,分钟在 0-59 之间。它还需要围绕时间的单词边界。它不允许破折号或冒号周围有空格。

尽管如此,根据定义,您会得到很多误报,尤其是您的[num]-[num]格式,它看起来很像日期和其他内容。

在这里测试。我没有找到特定的 .NET 测试仪,但我认为这都是标准的。

于 2012-12-12T15:26:34.163 回答
0

从那个“语法”构建一个正则表达式非常简单,看看 RegExes

/(\d{1,2})\s*([:-]\s(\d{1,2})|am|pm)/

我已将您的数字限制为 2 个字符长,您可能会忽略它,因为您可能会查看时间是否在有效范围内。要解析匹配的字符串,您可以从结果中提取匹配组。

于 2012-12-12T15:23:10.723 回答