У меня есть следующий макрос и следующие входные данные:
\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
никогда не находятся. Это обычное поведение поиска с регулярными выражениями: никакая часть входной строки не является частью нескольких совпадений. Вместо этого, после нахождения совпадения, поисковая система отбрасывает любую использованную часть входной строки и продолжает поиск после совпадения.