正規表現 Pandoc テーブルとして

正規表現 Pandoc テーブルとして

正規表現の最小データ

\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}

希望の出力

-------------------------------------------------------------
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.

LaTeXドキュメントからすべてのテーブルを抽出したいと思います。

擬似コード

  1. 連続した7つ以上の「-」と一致し、「Table:」までのすべての項目と一致します。 「Table:」行を含めますが、その行の後には何も含めません。
  2. 1) ファイルの最後まで繰り返す

私の試み

最初のステップ

[-]{10,777}$

「Table:」という単語を除くすべての項目が含まれます。

((?!Table:).)*$

最終的には「テーブル:」と一致するすべてが含まれます。

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

すべてマージ

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

これはうまくいきません。何か間違っていますが、何かわかりません。

これらの環境では、正規表現はPerlでどのようにうまく機能しますか?

ベストアンサー1

質問を更新すると修正します。しかし、考えるあなたは次のようなものを探しています:

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

説明する

  • -007:ファイル全体を飲み込む
  • -lnel各呼び出しにprint新しいファイルを追加し、入力ファイルを処理し、指定されたスクリプトを実行します-e
  • @F=(/pattern/gsm)pattern配列内のすべての一致を保存します@F。改行文字が一致し、一致演算子が複数行にわたって一致するようにgグローバル一致を有効にします。s.m
  • -{7,}.*?Table:.*?\n(?=\n):7つ以上の項目に一致し、-最初のTable:()まで一致し、最初の.*?Table:)2つの連続改行文字()まで一致します。複数の改行を印刷しないようにプレビューを使用しています。.*?\n(?=\n)
  • print join "\n", @F:配列の各要素を印刷し、@F改行文字で区切ります。

おすすめ記事