使用正则表达式解析文件并返回第一个匹配项

使用正则表达式解析文件并返回第一个匹配项

我需要编写一个命令,在文件中搜索与某个正则表达式匹配的字符串,然后插入该字符串。我知道如何使用正则表达式解析文本字符串

\usepackage{l3regex}
\ExplSyntaxOn
\cs_new_protected:Npn \mycom #1
  {
    \tl_set:Nn \l_tmpa_tl {#1}
    \regex_replace_all:nnN { THE-REGEXP } { THE-REPLACEMENT } \l_tmpa_tl
    \tl_use:N \l_tmpa_tl
  }
\ExplSyntaxOff

但我不知道如何使用它来解析文件的内容。我尝试用 替换{#1}{\input{#1}}但没有成功(\input仅被视为字符串的一部分)。

答案1

目前,还没有将文件内容存储到标记列表中的工具,但是您仍然可以使用该catchfile包:

\documentclass{article}
\usepackage{catchfile}
\usepackage{expl3,l3regex}
\ExplSyntaxOn
\cs_new_protected:Npn \mycom #1
  {
    \CatchFileDef \l_tmpa_tl {#1} {}
    \regex_replace_all:nnN { xrep } { foo } \l_tmpa_tl
    \tl_use:N \l_tmpa_tl
  }
\ExplSyntaxOff

\mycom{xrep}

更新

在 2014-06-25 的修订版中,功能已添加到expl3

\documentclass{article}
\usepackage{expl3,l3regex,xparse}
\ExplSyntaxOn

\NewDocumentCommand{\mycom}{m}
 {
  \malabarba_mycom:n { #1 }
 }

\tl_new:N \l_malabarba_mycom_content_tl
\cs_new_protected:Npn \malabarba_mycom:n #1
  {
   \tl_set_from_file:Nnn \l_malabarba_mycom_content_tl {} {#1}
   \regex_replace_all:nnN { xrep } { foo } \l_malabarba_mycom_content_tl
   \tl_use:N \l_malabarba_mycom_content_tl
  }
\ExplSyntaxOff

\mycom{xrep}

\CatchFileDef请注意,和之间存在差异\tl_set_from_file:Nnn:在前一个命令中尾随参数包含在加载文件之前要(本地)执行的设置指令,在后者中,这些设置令牌应放在第二个参数中

\CatchFileDef<command name>{<filename>}{<setup>}

\tl_set_from_file:Nnn <tl variable> { <setup> } { <filename> }

的类似物\CatchFileEdef称为

\tl_set_from_file_x:Nnn

相关内容