2012-04-27 2 views
0

Regex всегда был темным искусством для меня, и я слишком долго не занимался программированием, но это либо невозможно, либо просто так, как я надеюсь.трудность с необязательными группами

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

8825| - MIA *** LHR ** JFK JFK - DME - SIN *** *** SYD *** SIN *** LHR ** - - BOS *** LHR - - - GRU *** ***  

он должен соответствовать

MIA *** LHR ** or 
JFK JFK or 
SIN *** *** SYD *** SIN *** LHR ** or 
BOS *** LHR or 
GRU *** *** or 
DME 

Это

([A-Z]{3})\s(([A-Z]{3}|[*]{2,3})\s)+ 

соответствует все, часть из

DME 

и теперь я застрял. Любая помощь или указатели с благодарностью получили.

+2

Я действительно не понимаю ... Что общего у ваших шаблонов соответствия? –

ответ

0

Попробуйте это: (Если я думаю, что вам может понадобиться ...) - ОБНОВЛЕНО

([A-Z]{3}\s([A-Z]{3}|([\*]{2,3}\s){1,2})?)+ 

Демо:

http://regexr.com?30po5

Матчи :

MIA *** LHR ** 
JFK JFK 
SIN *** *** SYD *** SIN *** LHR ** 
BOS *** LHR 
GRU *** *** 
DME 
+0

При условии большего количества данных, я думаю, что нашел свое исправление '([AZ] {3}) \ s (([AZ] {3} | [*] {2,3}) \ s) *' Необходимо изменить + для * в конце – user1360490

+0

@ user1360490 Я только что обновил свой ответ; Взгляни. –

0

Это будет работать на данном примере:

[A-Z]{3}(((?:\s*[*]{3}\s*)+([A-Z]{3})+)*(\s*[*]{2,3}\s*?)?)|[A-Z]{3}(\s*[A-Z]{3})? 

Однако, я хотел бы предложить вам указать более строгие правила относительно того, что вы хотите, чтобы соответствовать - не делая это все, что мы делаем здесь просто гадание и регулярное выражение, которое мы придумали, могут не работать для других примеров, если они в чем-то разные.

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