\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}

MWE 输出

如您所见,bcde永远fg找不到。这是正则表达式搜索的常见行为:输入字符串的任何部分都不属于多个匹配项。相反,在找到匹配项后,搜索引擎会丢弃输入字符串的任何已使用部分,并在匹配项之后继续搜索。

相关内容