替换包括反斜杠在内的多个字符

替换包括反斜杠在内的多个字符

我的情况是需要替换句子中的多个字符。在下面附带的工作示例中,命令关系B取代反斜杠和命令替换A替换许多其他字符,如 **、/* 等。但我无法将这两个命令组合在一起形成一个新命令(替换 - *、/、\ 等)。有人知道如何修复它吗?

\documentclass{article}
\usepackage{xparse}

%Removing other characters
\ExplSyntaxOn
\tl_new:N \l_azor_string_tl
\cs_new_protected:Npn \azor_replace_norsk:n #1
 {
  \tl_set:Nn \l_azor_string_tl { #1 }
  \tl_replace_all:Nnn \l_azor_string_tl { / } { -- }
  \tl_replace_all:Nnn \l_azor_string_tl { ? } { -- }
  \tl_replace_all:Nnn \l_azor_string_tl { * } { --}
  \tl_use:N \l_azor_string_tl
 }
\NewDocumentCommand \replaceA { m }
 {
  \azor_replace_norsk:n { #1 }
 }
\ExplSyntaxOff

%Removing backslash
\ExplSyntaxOn
\NewDocumentCommand{\replaceB}{m}
 {
  \tl_set:Nn \l_tmpa_tl { #1 }
  \regex_replace_all:nnN { \cC. } { \c{cs_to_str:N} \0 } \l_tmpa_tl
  \tl_use:N \l_tmpa_tl
 }
\ExplSyntaxOff

\begin{document}
\replaceA{a/b*c} %Works

\replaceB{d\e} %Works

\replaceA{\replaceB{a/b*cd\e}} %Does not work
\end{document}

答案1

用于\regex_replace_all:nnN同时完成所有业务:

\documentclass{article}
\usepackage{xparse}

%Removing other characters
\ExplSyntaxOn
\tl_new:N \l_azor_string_tl
\cs_new_protected:Npn \azor_replace_norsk:n #1
 {
  \tl_set:Nn \l_azor_string_tl { #1 }
  \regex_replace_all:nnN { \cC. } { -- \c{cs_to_str:N} \0 } \l_azor_string_tl
  \regex_replace_all:nnN { [/?\*] } { -- } \l_azor_string_tl
  \tl_use:N \l_azor_string_tl
 }
\NewDocumentCommand \replace { m }
 {
  \azor_replace_norsk:n { #1 }
 }
\ExplSyntaxOff

\begin{document}

\replace{a/b*c}

\replace{d\e}

\replace{a/b*cd\e?f*g}

\end{document}

在此处输入图片描述

相关内容