用逗号分割字符串

用逗号分割字符串

我需要用逗号分割字符串,但我还没有找到一种简单的方法来实现它xstringxparse尽管我可能遗漏了一些显而易见的东西)。所以如果我说:

\def\pleaseHelp{"I, am, confused"}

提取的最简单方法是什么:

{"I", "am", "confused"}

并将\pleaseHelp其存储为变量?我觉得这应该很简单。

答案1

listofitems是一个功能强大的列表解析包。您的示例是其功能中最简单的一个:

\documentclass{article}
\usepackage{listofitems}
\begin{document}
\def\pleaseHelp{I, am, confused}
\readlist*\mylist{\pleaseHelp}% star option removes surrounding whitespace
Individual items:\\
``\mylist[1]'' and\\
``\mylist[2]'' and\\
``\mylist[3]''

Loop over list:
\foreachitem\x\in\mylist[]{\ifnum\xcnt=1\else\ and \fi``\x''}
\end{document}

在此处输入图片描述

此外,您还可以在 之前使用以下内容更改解析分隔符\readlist

\setsepchar{;}

您可以同时基于多个分隔符进行解析,并使用 或 ( ||) 分隔符规范:

\setsepchar{,||.||;||:}
\readlist*\Z{To be, or not to be; that is the question.}

\Z[1]将产生一个包含as To be\Z[2]as or not to be\Z[3]as 的列表that is the question

您可以使用斜线 ( /) 分隔符列表进行嵌套解析,例如:

\setsepchar{*/,}
\readlist*\Z{this is, a test* of multi-level, parsing}

然后,\Z[1,1]包含this is\Z[1,2]包含a test\Z[2,1]包含of multi-level,和\Z[2,2]包含parsing

当我使用“包含”这个词时,我的意思是“通过两次扩展,扩展为实际的标记”,因此在上面的例子中,\detokenize\expandafter\expandafter\expandafter{\Z[2,2]}将产生parsing

答案2

由于您没有发布 MWE,这里有一个简单的方法来访问这种逗号分隔列表的项目(看看http://mirrors.ctan.org/macros/latex/contrib/l3kernel/interface3.pdf了解更多信息):

\usepackage{xparse}
\ExplSyntaxOn
\NewDocumentCommand { \giveme } { m m }
{
    \clist_item:nn { #1 } { #2 }
}
\ExplSyntaxOff

其用途如下:

\giveme{I, am, confused}{1} % would return I which is item 1

如果您确实想存储变量,请查看l3clist我上面链接的文档中描述的模块。

相关内容