Perl を使用して、テキストから特定の正規表現のすべてのインスタンスを削除します。

Perl を使用して、テキストから特定の正規表現のすべてのインスタンスを削除します。

私はテキストファイルから特定の正規表現のすべてのインスタンスを削除するために正しい1行のPerlコードを探しています。

つまり、[ の後に大文字、 ] までの文字とスペースが続くすべてのインスタンスを削除したいのです。たとえば、[CP 5.491]または[MS 283: 56 (variant) in Colapietro, 1989, p. XIV]

ファイルを処理するために書いた単純なスクリプトはすでにその言語を使用しているので、Perlでこれをやりたかったのです。

編集する:

以下の2つの完全に適切な答えを試した後、元の質問で間違いを犯したことに気づきました(申し訳ありません!)。また、開いcfている括弧の後に大文字が続くインスタンスも削除する必要がありました[cf. CP 2.282]。このパラメータをどのように追加できますか?

ベストアンサー1

削除する:

  • 文字[\[
  • その後に大文字が続きます([A-Z]Asciiのみ)。
  • または(代替)文字列cf([A-Z]|cf))。
  • 次に、任意の数の文字とスペースが続きます([^]]a以外])。
  • まで]\])。

次のいずれかの方法を使用できます(Perlから):

\[([A-Z]|cf)[^]]\]        # Ascii uppercase, avoid `]`
[[]([A-Z]|cf)[^]][]]      # A bit more confusing expression of the same.
[[]([A-Z]|cf).*?[]]       # Use a lazy quantifier (the shorter match).
[[](\p{Lu}|cf).*?[]]      # Unicode property: Letter Uppercase.
\[(\p{Lu}|cf).*?\]        # Probably easier to read.

[^]]負の範囲式()または遅延一致()を使用しない場合、.*?式は文字列全体と一致します。

this part [CP 5.491] or this part [cf 283: 56 in Colapietro, 1989, p. XIV]

いいえ部分。

perl -pe '$_ =~ s/\[(\p{Lu}|cf).*?\]//g' file

おすすめ記事