\regex_match не работает так, как ожидалось

\regex_match не работает так, как ожидалось

У меня есть следующий макрос и следующие входные данные:

\def\something#1{
    \regex_extract_all:nnN{
            ([A-Za-z]{1}\d{1,2})\s*-\|\s*([A-Za-z]{1}\d{1,2})
        }{#1}\l_my_seq
    \seq_map_inline:Nn\l_my_seq{##1,\par}
}

\something{A1-|B2-|C3}

Проблема в том, что я извлекаю только A1 и B2, а не B2 и C3. Что не так с регулярным выражением?

введите описание изображения здесь

решение1

Вы ошибаетесь в том, что \regex_extract_all:nnNделает. Рассмотрим этот более простой пример.

\documentclass{article}

\ExplSyntaxOn
  \def\something#1{
      \regex_extract_all:nnN{..}{#1}\l_my_seq
      \seq_map_inline:Nn\l_my_seq{##1,~}
  }
\ExplSyntaxOff

\begin{document}

\something{abcdefg}

\end{document}

Выход МВЭ

Как вы можете видеть, bc, deили fgникогда не находятся. Это обычное поведение поиска с регулярными выражениями: никакая часть входной строки не является частью нескольких совпадений. Вместо этого, после нахождения совпадения, поисковая система отбрасывает любую использованную часть входной строки и продолжает поиск после совпадения.

Связанный контент