Python split()と正規表現で不要なテキストを削除

python

次のようなコードの意味がわからないと質問がありましたので解説します。
尚、コードのtext内容の文章の一部にある「\」はテキスト内容を見やすくするためにテキスト部分を折り返していますが、エラーが出ないための対策です。

import re
text = '霞が関。かつての江戸城の南側にあたり、大名屋敷(江戸藩邸)があった場所である。日本の中央省庁が集中する。\
-------------------\
東京駅。1914年開業。赤レンガの歴史的な建造物。西日本等々から鉄道で東京に来る人にとっての東京の玄関口のような存在。\
-------------------\
東京国際空港。所在地から「羽田空港」とも呼ばれている。飛行機で東京に来る人にとっての東京の玄関口。'

text = re.split('\-{5,}',text)[1]
print(text)

結果

東京駅。1914年開業。赤レンガの歴史的な建造物。西日本等々から鉄道で東京に来る人にとっての東京の玄関口のような存在。

なぜ、上下の点線で囲まれた部分が表示されるのか不明ということです。

スポンサーリンク

re.split()の使い方

reモジュールは正規表現を使用するためのモジュールです。
まずこれをインポートしておいて、reに用意されたsplit()を使います。
split()は正規表現を使って指定した文字列を削除し、残りの文字列を削除した文字列で分割します。
第1引数は正規表現で対象のテキストを指定します。
第2引数は元になるテキストを指定します。
この関数の返り値は、リスト形式で指定した文字や記号などを削除した結果の残りの文章を返します。
ここで重要なのは返り値がリスト形式になっているということです。
どのようなリストになるかというと、削除した文字を切り口にしてその前の文章とその後の文章に分けられてリスト化されます。
このことが理解できると「re.split(‘\-{5,}’,text)[1]」部分の[1]の意味がわかってくると思います。
つまり返り値のリストの2番目の要素として保管された文章ということです。

正規表現の記述

正規表現の「\-{5,}」部分の意味は次の通りです。
正規表現内のバックスラッシュはその直後に続く記号は正規表現としてではなく、本来の記号として使うということです。
今回の「\-」 はハイフン(-)の意味合いです。
けれども、ハイフンにバックスラッシュが必要なのは実際には [ ] 内で使用する場合に限られます。例 [a-z] などで使用されるため。
そのため今回の用途ではバックスラッシュがなくても正常に動きます。

また、場合によっては「re.split(r’\-{5,}’,text)[1]」のようにクオテーションの前に r を置く場合があります。
これは raw文字列 を意味します。raw文字列 にすることでエスケープ文字を無視してバックスラッシュをバックスラッシュとして扱います。

続いて、{5,} は繰り返しを意味します。本来{5,10}のような指定をするもので、{5,10}は5回から10回繰り返すという意味です。
{5,} は5回から無限回まで繰り返すということで、5回以上繰り返しということです。

結局「\-{5,}」とするとハイフンを5回以上繰り返した部分という意味です。
今回のテキストの場合は「——————-」部分が2箇所ありますので、それを削除して、さらにその削除した2箇所を境目にした文章でリストを作って返すことを行なっています。

最終的に、「text = re.split(‘\-{5,}’,text)[1]」は「——————-」部分を削除して、さらにその削除した2箇所を境目にした文章をリスト化して、さらにそのリストの2番目の文章を変数に代入するということです。

タイトルとURLをコピーしました