Python регулярное выражение только для первого совпадения и игнорирование других совпадений - PullRequest
0 голосов
/ 04 марта 2020

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

prefix:long-name

внутри текста примера:

prefix:long-name
asdd prefix:long-name asddasd
asdd prefix:long-name;
 prefix:long-name
prefix:long-name:other-prefix:long-name:long-name
prefix:long-name

Но оно не должно совпадать в следующей строке :

prefix:long-name:other-prefix:long-name:long-name

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

([^;\{\}\s\*\+\'"]+)(:)([^;\{\}\s\*\+\'"]+)

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

См. Regex101.com

В конце строки может быть конец строки, но также может быть один из [\s\{\}\;].

У кого-нибудь есть чаевые?

Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 05 марта 2020

Я мог бы решить требования с lookahead и lookbehind утверждением со следующим шаблоном регулярных выражений:

(?:^|(?<=[\s\{\}\;]))([^;{}\s\*\+\'\"\:\/]+)(:)([^;{}\s\*\+\'\"\:\/]+)(?:$|(?=[\s\{\}\;]))

См. Regex101.com для пример.

0 голосов
/ 04 марта 2020

Вы можете попробовать использовать следующий шаблон:

(?<!\S)[^\s:]+:[^\s:]+(?!\S)

Пример сценария:

inp = "asdd prefix:long-name asddasd prefix:long-name:other-prefix:long-name:long-name"
matches = re.findall(r'(?<!\S)[^\s:]+:[^\s:]+(?!\S)', inp)
print(matches)

Печатается только короткое совпадение:

['prefix:long-name']
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...