регулярное выражение с перестановками и повторениями - PullRequest
0 голосов
/ 14 декабря 2018

Для следующих шаблонов мне нужно захватить «что-нибудь» (может содержать любой символ, кроме последовательности \s-), последнее появление B и последнее появление C в трех разных группах.B и C могут быть переставлены и повторены, но их нужно захватить, только если они появляются после \s-.

any-thing
any-thing -
any-thing - K      => only captures any-thing, ignore everything after \s-
any-thing - B
any-thing - C
any-thing - B C
any-thing - C B
any-thing - B B
any-thing - C C

Пока у меня есть (.*)\s-(\s+B|\s+C)*, но в первых двух случаях это не работает,Регулярное выражение должно работать в Python.

Ответы [ 4 ]

0 голосов
/ 14 декабря 2018

Если первая часть может содержать любой символ, кроме последовательности \s-, вы можете использовать:

^((?:.(?!-\s))+)(?:\s-)?((?:\s+[BC])*)

См. Демонстрационный пример regex

Пояснение

  • ^ Начало строки
  • ( Начало группы захвата
    • .(?!-\s) Соответствует любому последующему символуотрицательным взглядом, чтобы подтвердить, что то, что справа, не -\s
  • )+ Закрыть группу захвата и повторить 1+ раз
  • (?:\s-)? Optinalгруппа без захвата, соответствующая символу пробела и дефису
  • ( Начало группы захвата
    • (?:\s+[BC])* Повтор 0+ раз 1+ символов пробела, за которыми следуют B или C
  • ) Закрыть группу захвата
0 голосов
/ 14 декабря 2018

Это регулярное выражение должно делать то, что вы хотите:

^(.*?)(?:\s-((?:\s+B|\s+C)*)|$)

Он ищет некоторое количество символов, за которым следует либо \s- и некоторое число (0 или более) из B с или C s или конец строки.Он будет соответствовать всем предоставленным вами образцам данных;первая строка в группе 1 и B s и C s в группе 2.

Демонстрация по регулярному выражению regex101

0 голосов
/ 14 декабря 2018

Вы можете использовать этот помощник

.*\s*-.*

Объяснение

  • .* - Соответствует всему, кроме новой строки. (Жадный режим).
  • \s* - соответствует пробелу ноль или более раз.
  • - - соответствует - (? Делает его необязательным).
  • .* - Соответствует всему, кроме новой строки. (Жадный режим).

Демо

0 голосов
/ 14 декабря 2018

Помогает ли это -> \ w * - \ w +?? -? (B | | C) *

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