正規表現の最小データ
\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ドキュメントからすべてのテーブルを抽出したいと思います。
擬似コード
- 連続した7つ以上の「-」と一致し、「Table:」までのすべての項目と一致します。 「Table:」行を含めますが、その行の後には何も含めません。
- 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
:ファイル全体を飲み込む-lne
:l
各呼び出しに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
改行文字で区切ります。