У меня есть шаблон, который соответствует нескольким парам ключ/значение, и строки ключ/значение могут быть разделены любыми символами, тогда группы ключ/значение также могут быть разделены, только не одним и тем же персонажем.
Я понял, как разрешить динамические разделители и ограничить использование одного и того же разделителя дважды. НАПРИМЕР:
\w+(?P<kv_delim>[:;|])\d+(?P<g_delim>(?!(?P=kv_delim))[:;|])\w(?P=kv_delim)\d(?P=g_delim)?
Вы можете просмотреть пример regex101.com здесь. И это прекрасно работает, проблема возникает при использовании любой из двух именованных групп в позитивном ретроспективном анализе.
Допустим, строка
foo:1;r:2
«Разделитель ключ/значение» (группа с именем: kv_delim
) — это :
, затем «разделитель группы» (группа с названием: grp_delim
) — это ;
.
Что я пытаюсь сделать, так это динамически сопоставлять :
и ;
, а затем в операторе поиска искать foo<kv_delim>
или bar<kv_delim>
.
Если я жестко запрограммирую разделители (в обзоре), вы увидите, что это работает. Но если я попытаюсь сослаться на именованную группу kv_delim
в операторе поиска, вы увидите, что это выдает ошибки< /а>. Я получаю сообщение об ошибке:
Ссылки на подшаблоны не допускаются в утверждении просмотра назад.
Это то, что пинает мою задницу
У кого-нибудь есть способ сделать эту работу?
Спасибо!
.
вместо обратной ссылки. - person Aran-Fey   schedule 12.09.2016\G
, который поддерживается только более новым модулемregex
. - person Jan   schedule 12.09.2016