Ich habe folgendes Makro und folgende Eingabe:
\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}
Das Problem ist, dass ich nur A1 und B2 extrahiere, nicht aber B2 und C3. Was ist falsch an dem regulären Ausdruck?
Antwort1
Sie liegen falsch \regex_extract_all:nnN
. Betrachten Sie dieses einfachere Beispiel.
\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}
Wie Sie sehen, werden bc
, de
oder fg
nie gefunden. Dies ist das übliche Verhalten bei der Suche mit regulären Ausdrücken: Kein Teil der Eingabezeichenfolge ist Teil mehrerer Übereinstimmungen. Vielmehr verwirft die Suchmaschine nach dem Finden einer Übereinstimmung alle verbrauchten Teile der Eingabezeichenfolge und setzt die Suche nach der Übereinstimmung fort.