To Regex Pandoc Tables

1

Dados mínimos para regex

\documentclass{article}
\begin{document}

-------------------------------------------------------------
A           B       C               D
Header      Aligned Aligned         Aligned
----------- ------- --------------- -------------------------
First       row     12.0            Example of a row that
                                    spans multiple lines.

Second      row     5.0             Here's another one. Note
                                    the blank line between
                                    rows.
-------------------------------------------------------------

Table: Here's the caption. It, too, may span
multiple lines.

\section{Lorem Ipsun}
Hello world!

-------------------------------------------------------------
A           B       C               D
Header      Aligned Aligned         Aligned
----------- ------- --------------- -------------------------
First       row     12.0            Example of a row that
                                    spans multiple lines.

Second      row     5.0             Here's another one. Note
                                    the blank line between
                                    rows.
-------------------------------------------------------------

Table: Here's the caption. It, too, may span
multiple lines.

\end{document}

Saída desejada

-------------------------------------------------------------
A           B       C               D
Header      Aligned Aligned         Aligned
----------- ------- --------------- -------------------------
First       row     12.0            Example of a row that
                                    spans multiple lines.

Second      row     5.0             Here's another one. Note
                                    the blank line between
                                    rows.
-------------------------------------------------------------

Table: Here's the caption. It, too, may span
multiple lines.

-------------------------------------------------------------
A           B       C               D
Header      Aligned Aligned         Aligned
----------- ------- --------------- -------------------------
First       row     12.0            Example of a row that
                                    spans multiple lines.

Second      row     5.0             Here's another one. Note
                                    the blank line between
                                    rows.
-------------------------------------------------------------

Table: Here's the caption. It, too, may span
multiple lines.

Eu quero extrair todas as tabelas do documento LaTeX.

Pseudocódigo

  1. corresponde a > 7 de "-" seguidos e até tudo até "Tabela:". Inclua a linha com "Tabela:", mas não nada depois dessa linha.
  2. iterar 1) até o final do arquivo

Minha tentativa

O primeiro passo

[-]{10,777}$

e incluir agora tudo, exceto a palavra "Tabela:"

((?!Table:).)*$

e inclua finalmente tudo da linha com "Tabela:"

^(?=.*?\Table:\b)

Tudo combinado

[-]{10,777}$((?!Table:).)*$^(?=.*?\Table:\b)

que não pode funcionar. Há algo errado, mas eu não sei o quê.

Como você pode regexar bem esse ambiente em Perl?

    
por Léo Léopold Hertz 준영 18.05.2015 / 19:07

2 respostas

2

Eu edito isso se você atualizar a pergunta, mas eu acho que você está procurando por algo assim:

perl -007lne '@F=(/-{7,}.*?Table:.*?\n(?=\n)/gsm); print join "\n", @F' file.tex 

Explicação

  • -007 : sorve o arquivo inteiro
  • -lne : inclua um novo l ine em cada print call, processe o arquivo de entrada e execute o script fornecido por -e .
  • @F=(/pattern/gsm) : salva todas as correspondências de pattern na matriz @F . O g ativa a correspondência global, a s torna . newlines e a m faz com que o operador de correspondência corresponda em várias linhas.
  • -{7,}.*?Table:.*?\n(?=\n) : corresponde a 7% ou mais - , então até o 1º Table: ( .*?Table:) , então qualquer coisa até as duas primeiras novas linhas consecutivas ( .*?\n(?=\n) ). Estou usando uma visão inicial apenas para evitar a impressão de ambos novas linhas.
  • print join "\n", @F : imprime cada elemento da matriz @F , separando-os com novas linhas.
por 18.05.2015 / 19:27
2
sed -n '/-\{10,777\}/,/^\s*Table:/p' LaTeX.doc

Se você quiser uma nova linha após cada tabela:

sed -n '/^\s*Table:/G;/-\{10,777\}/,/^\s*Table:/p' LaTeX.doc

ou

sed '/-\{10,777\}/,/^\s*Table:/! d;/^\s*Table:/G' LaTeX.doc
    
por 18.05.2015 / 22:19