在这种情况下,积极的后视将是最短/最简单的正则表达式,但它并非无处不在,因此取决于您使用的语言/环境。
仅匹配-
以下内容AM
:
(?<=AM )-
根据数据中误报的可能性,这可能需要加强,例如也HAM - CHEESE
将匹配,因此使用积极的后视和前瞻:
(?<=:\d{2} AM )-(?= \d{1,2}:\d{2} PM)
?<= # Positive look-behind
: # Match colon
\d{2} # Followed by 2 digits (and a space)
AM # Followed by AM (and a space)
- # Match hyphen if look-behind is met
?= # Positive look-ahead
\d{1,2} # Match either 1 or 2 digits
: # Followed by a colon
\d # Followed by 2 more digits
PM # Finally a space and PM
这应该排除任何误报。
演示grep
:
$ echo '(any text) XX:XX AM - XX:XX PM (any text)' | grep -Po '(?<=AM )-'
-
$ echo '12:45 AM - 1:20 PM' | grep -Po '(?<=:\d{2} AM )-(?= \d{1,2}:\d{2} PM)'
-
另一种选择是使用捕获组,以下regexp
将匹配整行并且-
将在捕获组 1 中匹配:
^.*\d{1,2}:\d{2}\sAM\s(-)\s\d{1,2}:\d{2}\sPM.*$