この状況では、肯定的な後読みが最短/単純な正規表現になりますが、どこでもサポートされているわけではないため、使用している言語/環境によって異なります。
-
次のみに一致します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.*$