如何访问 \regex_extract_once 中的正则表达式的匹配项?

如何访问 \regex_extract_once 中的正则表达式的匹配项?

这次我有一个接受字符串的函数,它将测试最后一个破折号后给出的颜色是否属于给定的颜色集。虽然我可以为其设计一个正则表达式,但我似乎太笨了,无法访问我期望存储在中的结果l_IconAndColor_seq

\documentclass{standalone}

\ExplSyntaxOn

\NewDocumentCommand{\ColorNameChopper}{m}
{
    \my_colornamechopper:n { #1 }
}

\seq_new:N \l_IconAndColor_seq

\cs_new:Nn \my_colornamechopper:n
{
    #1: & \regex_extract_once:nnNTF 
    {\A(.*)-(Black|White)\Z}
     {#1}
     \l_IconAndColor_seq
     {TRUE & \seq_item:Nn \l_IconAndColor_seq {2} & \seq_item:Nn 
     \l_IconAndColor_seq {3} & 
     \seq_count:N \l_IconAndColor_seq}
     {FALSE}\\
}

\ExplSyntaxOff

\begin{document}
    \begin{tabular}{lllll}
    String & Found & First & Second & Size\\
    \ColorNameChopper{Test-Black}
    \ColorNameChopper{Test-White}
    \ColorNameChopper{Test-Orange}
    \end{tabular}
\end{document}

我可能正在为一些简单的事情而苦苦挣扎,但我看不到它,而且序列长期以来都是空的:

在此处输入图片描述

答案1

您正在表格单元格中设置序列并尝试在另一个单元格中使用它。

此外,你想使用最后的序列中的项目。

第一个问题可以通过在使用前扩展内容来解决。另一个问题可以通过使用项目-1来解决

\documentclass{article}

\ExplSyntaxOn

\NewDocumentCommand{\ColorNameChopper}{m}
  {
    \tobibs_colornamechopper:n { #1 }
  }

\seq_new:N \l__tobibs_colornamechopper_seq

\cs_new_protected:Nn \tobibs_colornamechopper:n
  {
    #1: &
     \regex_extract_once:nnNTF {(.*)-(Black|White)} {#1} \l__tobibs_colornamechopper_seq
       {
         \use:e
           {
             TRUE &
             \seq_item:Nn \l__tobibs_colornamechopper_seq {-2} &
             \seq_item:Nn \l__tobibs_colornamechopper_seq {-1} &
             \seq_count:N \l__tobibs_colornamechopper_seq
           }
       }
       {FALSE}
    \\
  }

\ExplSyntaxOff

\begin{document}

\begin{tabular}{lllll}
String & Found & First & Second & Size\\
\ColorNameChopper{Test-Black}
\ColorNameChopper{Test-White}
\ColorNameChopper{Test-Orange}
\ColorNameChopper{Test-again-Black}
\end{tabular}

\end{document}

在此处输入图片描述

它是如何以及为什么工作的?首先,您的命令\regex_extract_once:nnNTF在表格单元格中设置序列,因此一旦 TeX 处理&(排版时),该值就会丢失。

但是,如果我们在处理表格行之前构建整个表格行,则值不会丢失(扩展发生在与排版不同的级别,因此 TeX 不会“看到” &,因为它只是扩展宏而不是构建表格。是的,表格很难管理。

相关内容