您可以使用 l3regex /\regex_replace_all:nnN
将标记列表中类别 11(字母)的每个显式字符标记替换为其类别 12(其他)挂件吗?或者用其类别 6(参数)挂件替换?
更概括:您能否使用 l3regex /\regex_replace_all:nnN
将标记列表中某个类别的每个显式字符标记替换为另一个类别的挂件?
(请忽略某些情况,在这些情况下,在处理过程中,这会导致标记列表中的标记包含不平衡的括号。)
如果是:怎么做?替换文本应该是什么\regex_replace_all:nnN
样的?
如果没有:没关系。我会编写自己的替换程序。;-)
正如我所料,下面的例子不起作用——\scratchy_showloop:n
表明在正则表达式替换之后,标记列表仍然包含“字母”=类别 11 的字符标记,而不包含“字符”=类别 12 的字符标记。
(我提供这个最小示例是为了满足那些坚持要看最小示例的人。)
\ExplSyntaxOn
\tl_new:N \l__scratchy_tl
\cs_new:Nn \scratchy_showloop:n {
\quark_if_recursion_tail_stop:n {#1}
\cs_show:N #1
\scratchy_showloop:n
}
\tl_set:Nn \l__scratchy_tl { abcdefg }
\regex_replace_all:nnN { \cL. } { \cO(\0) } \l__scratchy_tl
\exp_args:NnV \use:nn \scratchy_showloop:n \l__scratchy_tl \q_recursion_tail \q_recursion_stop
\stop
答案1
您也可以使用\tl_set_rescan:Nno
以下类别代码表:
\ExplSyntaxOn
\cctab_new:N \g_xitoxii_cctab
\cctab_gset:Nn \g_xitoxii_cctab
{
\cctab_select:N \c_document_cctab
\int_step_inline:nn { 255 }
{
\int_compare:nT { \char_value_catcode:n { #1 } = 11 } { \char_set_catcode_other:n { #1 } }
}
}
\tl_set:Nn \l_tmpa_tl {abcde@f&^}
\tl_set_rescan:Nno \l_tmpa_tl { \cctab_select:N \g_xitoxii_cctab } { \l_tmpa_tl }
\tl_analysis_show:N \l_tmpa_tl
\stop
控制台将显示
The token list \l_tmpa_tl contains the tokens:
> a (the character a)
> b (the character b)
> c (the character c)
> d (the character d)
> e (the character e)
> @ (the character @)
> f (the character f)
> & (alignment tab character &)
> ^ (superscript character ^).