Regexar este formato de pergunta para o LaTeX

4
1. Lorem ipsun la la la?
1. Sopor
2. Stupor
3. Torpor

2. A patient has Lorem?
1. Sopor
2. Stupor
3. Somnolentia 
4. La
5. Coma

3. Doesn't Response to strong external irritants is short. Tendon, pupillary, corneal reflexes are retained. Doesn't Response to strong external irritants is short. Tendon, pupillary, corneal reflexes are retained. What disorder of consciousness does he have?
1. Stupor
2. Sopor
3. Somnolentia 
4. Euphoria
5. Coma

... [777 questions]

que eu quero ser

l. Lorem ipsun la la la?
\begin{enumerate}
\item Sopor
\item Stupor
\item Torpor
\end{enumerate}    

2. A patient has Lorem?
\begin{enumerate}
\item Sopor
\item Stupor
\item Somnolentia 
\item La
\item Coma
\end{enumerate}

3. Doesn't Response to strong external irritants is short. Tendon, pupillary, corneal reflexes are retained. Doesn't Response to strong external irritants is short. Tendon, pupillary, corneal reflexes are retained. What disorder of consciousness does he have?
\begin{enumerate}
\item Stupor
\item Sopor
\item Somnolentia 
\item Euphoria
\item Coma
\end{enumerate}

Algumas notas

  • Existe entre 3 e 5 opções para respostas
  • Não tenho certeza de qual pedido é melhor fazer essas alterações.
  • lista 1.[ A-Za-z123345679.]*5.\n deve ser substituída por \n\begin{enumerate}[match]\end{enumerate}\n
    • se não for bem sucedido com 1.[ A-Za-z123345679.]*4.\n , deve ser substituído por \n\begin{enumerate}[mathch]\end{enumerate}\n
    • se não for bem sucedido com 1.[ A-Za-z123345679.]*3.\n , deve ser substituído por \n\begin{enumerate}[mathch]\end{enumerate}\n

Quais ferramentas de linha de comando devo usar para fazer isso? Perl vem à minha mente, mas não tenho certeza.

Acabei de perceber que o envio do conteúdo do arquivo gera uma saída diferente da esperada e no visualizador. Eu estou usando o mais novo OSX com Perl v5.16.2 no momento.

Este é o arquivo de teste .

Entrada, comando e saída

$ cat questions_copy.tex 
1. Lorem ipsun la la la?
1. Sopor
2. Stupor
3. Torpor

2. A patient has Lorem?
1. Sopor
2. Stupor
3. Somnolentia 
4. La
5. Coma

% STRANGE cat output here - Not correct!
3. Doesn't Response to strong external irritants is short. Tendon, pupillary, corneal reflexes are retained. Doesn't Response to strong external irritants is short. Tendon, 3. Somnolentia eal reflexes are retained. What disorder of consciousness does he have?
5. Comaoria
% PERL do the same mistakes
$ perl -000pe 's/\n/\n\begin{enumerate}\n/; s/\n\d./\n\item /g; s/$/\end{enumerate}\n/' questions_copy.tex 
1. Lorem ipsun la la la?
\begin{enumerate}
\item  Sopor
\item  Stupor
\item  Torpor
\end{enumerate}

2. A patient has Lorem?
\begin{enumerate}
\item  Sopor
\item  Stupor
\item  Somnolentia 
\item  La
\item  Coma
\end{enumerate}

3. Doesn't Response to strong external irritants is short. Tendon, pupillary, corneal reflexes are retained. Doesn't Response to strong external irritants is short. Tendon, 3. Somnolentia eal reflexes are retained. What disorder of consciousness does he have?
\begin{enumerate}
5. Coma\end{enumerate}

$ 
    
por Léo Léopold Hertz 준영 24.04.2014 / 11:34

1 resposta

3

Aqui está um jeito. Isso pressupõe que as perguntas sejam separadas por novas linhas consecutivas ( \n\n ).

$ perl -000pe 's/\n/\n\begin{enumerate}\n/; 
                s/\n\d./\n\item /g; s/$/\end{enumerate}\n/' file 
l. Lorem ipsun la la la?
\begin{enumerate}
\item  Sopor
\item  Stupor
\item  Torpor
\end{enumerate}

2. A patient has Lorem?
\begin{enumerate}
\item  Sopor
\item  Stupor
\item  Somnolentia 
\item  La
\item  Coma\end{enumerate}

Explicação

  • -000 : ativa o modo de parágrafo do Perl, isso faz com que "linhas" sejam definidas por duas novas linhas consecutivas ( \n\n ), para que cada uma das suas questões seja tratada como uma única linha.
  • -pne : leia cada linha do arquivo de entrada e imprima-o ( -p ) depois de aplicar o script passado como -e .
  • s/\n/\n\begin{enumerate}\n/ : substitua a primeira nova linha desta linha (pergunta) por \begin{enumerate}\n .
  • s/\n\d./\n\item /g : substitui qualquer número ( g ) que vem logo após um caractere de nova linha com o caractere de nova linha e \item seguido por um espaço.
  • s/$/\end{enumerate}\n/' : substitua o final do registro ( $ ) por \end{enumerate} e uma nova linha.
por 24.04.2014 / 12:56