Tengo la siguiente macro y la siguiente entrada:
\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}
El problema es que solo extraigo A1 y B2, y no B2 y C3. ¿Qué hay de malo con la expresión regular?
Respuesta1
Estás equivocado en lo que \regex_extract_all:nnN
hace. Considere este ejemplo más simple.
\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}
Como puede ver, bc
o de
nunca fg
se encuentran. Este es el comportamiento habitual de las búsquedas de expresiones regulares: ninguna parte de la cadena de entrada forma parte de múltiples coincidencias. Más bien, después de encontrar una coincidencia, el motor de búsqueda descarta cualquier parte consumida de la cadena de entrada y continúa buscando la coincidencia.