正则表达式匹配上午和下午分隔的小时数

时间:2015-08-08 21:32:04

标签: regex

我想出了以下正则表达式:

(\d*.*\d[am|pm])\w

匹配以下示例文本:

  

上午08点30分,下午5时30
  8 AM-5PM

我希望我的正则表达式能够逃脱连字符并返回以下匹配项:

8.30am
5.30pm
8am
5pm

不幸的是,目前我的正则表达式在每种情况下匹配整行。

1 个答案:

答案 0 :(得分:2)

你不能使用"整个单词"或在字符类内部交替。它目前匹配以下任何字符:(am|pm)。一个类匹配 set 字符中的任何一个字符。

我会写正则表达式如下:

\d+(?:\.\d+)?[ap]m

<强>解释

\d+        # digits (0-9) (1 or more times)
(?:        # group, but do not capture (optional):
  \.       #   '.'
  \d+      #   digits (0-9) (1 or more times)
)?         # end of grouping
[ap]       # any character of: 'a', 'p'
m          # 'm'

或者您甚至可以将其简化为:

[\d.]+[ap]m