2012-12-14 15 views
0

我有這樣正則表達式爲一個圖案內獲得字符

(任何文本)XX一個模式:XX AM - XX:XX PM(任何文本)

,其中X是0和9之間的數該數字可以是1或2個字符(例如:12:45或1:20)

我需要找到一個正則表達式來查找該模式之間的 - (短劃線字符)。

我是新的,但,這是我簡單的regex找到上面的圖案:

([\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]) 

這不把我的最終目標只是找到短跑中的中間模式。

+2

爲什麼你需要「找到」破折號?在衝刺位置的角色會有所不同嗎?或者你只是想檢查破折號是否正確放置? –

+0

你在用什麼語言? –

+1

您能否給我們一份*真實*樣本數據,所以我們有適當的輸入數據來測試我們的解決方案? – ghoti

回答

1

Positive look-behind會出現這種情況的最短/最簡單的正則表達式匹配,但它不支持到處都是,這取決於你使用的語言/環境。

僅匹配-以下AM

(?<=AM)- 

根據您的數據誤報的可能罩,這可能需要將收緊,如HAM - CHEESE也將匹配,所以使用正look-後面和前瞻:

(?<=:\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.*$ 
+1

非常完整。 TY。 – user1905381

0

這將找到破折號:

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

這使用一下變通,所以整個正則表達式只是連接字符

0
/\d\d:\d\d [ap]m (.) \d\d:\d\d [ap]m/i 
相關問題