2015-07-30 4 views
0

Я режу зубы в регулярном выражении за последние пару дней, и столкнулся с проблемой, с которой я не могу пройти.Как пропустить фразу только в том случае, если она существует

Давайте предположим, что струна следующие три значения

AKA NAME:FOO 
FOO 
AKA NAME: 

Моя цель состоит в том, чтобы захватить значение строки после AKA NAME: в имени группы матча, и если AKA NAME: нет, захватить весь строка в группе соответствия. Если «AKA NAME:» присутствует без последующего значения, выражение регулярного выражения должно завершиться неудачно. Я разработал следующее выражение

^(?:AKA NAME:)?\s*(?<VALUE>(.|\n|\r){1,225})$ 

Это правильно захватить слово «Foo» в первые 2 строки выше, однако, в третьей он захватывает «AKA NAME:» в группе матча. Я решил положить? после того, как группа без захвата, содержащая «AKA NAME:», заставила двигатель пропустить это значение, но это не так.

Может ли кто-нибудь дать мне руководство?

ответ

0

Используйте заглянем за утверждение, а затем исключения установить для "AKA NAME:" только:

Editted:

(?<=AKA NAME:)\s?(\w+)|(?!AKA NAME:)^(\w+)

DEMO

+0

ПРИМЕЧАНИЕ: Я использую python, какой формат является вашим регулярным выражением? – isosceleswheel

+0

Я использую .net. Это выражение было именно тем, что мне нужно. Благодаря! – markekt

0

Я думаю, что вы можете использовать это регулярное выражение:

"^(AKA NAME\s*:)?\s*(.*)$"gm 

a d получите \2 для вашего результата.

[Regex Demo]

1

Вы можете попробовать:

(?:AKA NAME:)*(.+)* 

и проверить, если $ 1 EXIST. DEMO

0

^(AKA NAME:)?(.*)$

\2 должен содержать то, что вы ищете.

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