2012-03-09 2 views
0

Я пытаюсь написать регулярное выражение для соответствия конкретных моделейписать регулярное выражение в Java

// 1. 1:15 
// 2. 3:15 PM 
// 3. (3:15) PM 
// 4. (3:15 PM) 
// 5. DIGITAL PROJECTION 1:35 AM 
// 6. (1:15) 
// 7. DIGITAL PROJECTION (1:35 AM) 
// 8. RWC/DVS IN DIGITAL PROJECTION (11:40 AM) 

, что я могу написать это

(.*)??\\s?\\(?(\\d{1,2})[:](\\d{1,2})\\)?\\s?(\\w{2})? 

Он работает для первых 5 примеров, но не другие, 2 проблемы, которые я вижу с этим регулярным выражением, например, 6 Я хочу, чтобы группа 1 была пустой, а пример 8 возвратил группу 1 в качестве «ЦИФРОВОЙ ПРОГНОЗ RWC/DVS» («но я хочу только« RWC/DVS DIGITAL PROJECTION »

+0

Можете ли вы дать некоторое объяснение того, что такое формат? –

+1

Пожалуйста, уточните свой вопрос, объяснив точно, что * ваше регулярное выражение должно соответствовать (и что это не должно). – pcalcao

+0

жаль, что не яснее, но @Colin ответил на мой вопрос – mkso

ответ

2

Вы ищете для s omething так:

^(.*?)\W*(\d{1,2}):(\d{1,2})\W*([AaPp][Mm])?.*$ 

Вот объяснение

^     <-- Beginning of the line 
    (.*?)   <-- Match anything (but ungreedy) 
    \W*   <-- Match everything that's not a word/number (we'll ignore that) 
    (\d{1,2})  <-- Match one or two digits (hours) 
    :    <-- : 
    (\d{1,2})  <-- Match one or two digits (minutes) [You should consider only matching two digits] 
    \W*   <-- Match everything that's not a word/number (we'll ignore that) 
    ([AaPp][Mm])? <-- Match AM or PM (and variants) if it exists 
    .*   <-- Match everything else (we'll ignore that) 
$     <-- End of the line 

Вы даже можете добавить еще \W* только после того, как в начале строки, чтобы игнорировать все, что это не слово/число перед поймать первую группу.

+0

поблагодарить u за ответ и подробное объяснение – mkso

Смежные вопросы