0

私は次のようなパターンを持っています

(任意のテキスト) XX:XX AM - XX:XX PM (任意のテキスト)

ここで、X は 0 から 9 までの数字で、数字は 1 文字または 2 文字です (例: 12:45 または 1:20)。

そのパターンの間に - (ダッシュ文字) を見つける正規表現を見つける必要があります。

私は新しいですが、これは上記のパターンを見つけるための私の単純な正規表現でした:

([\d]{1,2}:[\d]{1,2}|[\d]{1,2}:[\d]{1,2} [aApP][mM])(.*?)([\d]{1,2}:[\d]{1,2}|[\d]{1,2}:[\d]{1,2} [aApP][mM])

これでは、パターンの真ん中でダッシュを見つけるという私の最終的な目標にはなりません。

4

3 に答える 3

1

この状況では、肯定的な後読みが最短/単純な正規表現になりますが、どこでもサポートされているわけではないため、使用している言語/環境によって異なります。

-次のみに一致します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.*$
于 2012-12-14T23:35:42.017 に答える
0
/\d\d:\d\d [ap]m (.) \d\d:\d\d [ap]m/i
于 2012-12-14T23:45:48.343 に答える
0

これはダッシュを見つけます:

(?i)(?<\d\d?:\d\d?\s*[ap]m\s*).*?(?=\s*\d\d?:\d\d?\s*[ap]m)

これはルックアラウンドを使用するため、正規表現全体が接続文字のみに一致します

于 2012-12-14T23:34:02.953 に答える