написание выражения регулярных выражений в Java - PullRequest
0 голосов
/ 09 марта 2012

Я пытаюсь написать регулярное выражение для соответствия определенным шаблонам

// 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»

1 Ответ

2 голосов
/ 09 марта 2012

Вы ищете что-то подобное:

^(.*?)\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* сразу после начала строки, чтобы игнорировать все, что не является словом / числом, прежде чем поймать первую группу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...