Perl正規表現の列挙にアイテム置換を適用しますか?

Perl正規表現の列挙にアイテム置換を適用しますか?

データ

7. Masi is the same as
\begin{enumerate}
A
B
ABC ha lorem
\end{enumerate}

1. ABC is
\begin{enumerate}
P
B
Lorem maam
\end{enumerate}

私は〜になりたい

7. Masi is the same as
\begin{enumerate}
\item A
\item B
\item ABC ha lorem
\end{enumerate}

1. ABC is
\begin{enumerate}
\item P
\item B
\item Lorem maam
\end{enumerate}

私の開始正規表現は以下に基づいています。回答

perl -000pe
s/\n/\n\\begin{enumerate}\n [A-Za-z1-9]* \end{enumerate}/
... [problem here!]
masi.tex

どこ

  • -000:各質問が1行として処理されるように、「行」を2つの連続する改行(\ n \ n)として定義するPerlの短絡モードを有効にします。
  • -pe : 入力ファイルの各行を読み込み、-e(-p) に渡されたスクリプトを適用して印刷します。

\item一致する各行の先頭を.My疑似コードに置き換えたいと思います。問題はここのコードにあります

s/\n/\project/g

列挙コンテキストで項目を適用します。

どのように

ベストアンサー1

あなたは使用することができます..または範囲オペレータは交換を開始/終了部分に制限します。

while (<DATA>) {
   if ( /\\begin/ .. /\\end/ ) {
       s/^(?!\\)/\\item /;  
   }
   print;
}

__DATA__
7. Masi is the same as
\begin{enumerate}
A
B
ABC ha lorem
\end{enumerate}

1. ABC is
\begin{enumerate}
P
B
Lorem maam
\end{enumerat

コマンドラインスクリプトを好む場合:

perl -ne 'if (/\\begin/../\\end/) {s/^(?!\\)/\\item /};print'

または暗黙的に短いものを使用してくださいprint

perl -pe 'if (/\\begin/../\\end/) {s/^(?!\\)/\\item /}'

これは(?!...)否定的な配信の主張です。

おすすめ記事