正規表現と改行|Pythonの正規表現で改行コードを変換する方法を解説!

正規表現と改行|Pythonの正規表現で改行コードを変換する方法を解説!

Pythonエンジニア 案件・求人一覧はこちら

正規表現と改行


正規表現を用いると単純な文字列検索以外にも色々な条件をつけて検索することができるようになります。そのため正規表現を用いた置換機能を用いると手作業ではすごく時間が掛かっていた置換処理があっという間に終わってしまうということもよくあります。

改行はOS毎に使用しているコードが異なります。この機会に覚えましょう。

ここでは、まず「正規表現」と「改行」について簡単に説明します。その後、プログラミング言語Pythonを使ったサンプルプログラムをご紹介します。

正規表現とは?

正規表現とは複数の文字列をひとつのパターンで表現する方法です。

単純な文字列検索の場合、「Windows」という文字列を検索すると完全に一致する文字列だけを検索します。しかし正規表現を用いると「Windows」という文字列以外にも条件を付けて検索することができるようになります。

例えばテキストファイルから「Windows」という文字列を検索する際に「Windows」の後に数字が続く「Windows」のみを検索する場合を考えます。ただし「Windows 10」のように「Windows」と数字の間にある半角スペースは、あってもなくてもよいことにします。

このときの正規表現は下のようになります。「Windows」に続く「¥s*」が0個以上の半角スペースを表していて、続く「¥d+」が1つ以上の数字を表しています

改行とは?

テキストファイルには改行を示す「改行コード」という特殊な制御文字があります。改行コードはOS毎に異なっています。WindowsではCR+LF、Linux(UNIX)ではLF、macOS9以前のMacintoshではCRが使われています。

CRはキャリッジリターンでASCIIコードは0DH(=13)、LFはラインフィードでASCIIコードは0AH(=10)です。

改行コードと正規表現

正規表現で改行コードを表しますとCRは¥r、LFは¥nとなります。Windowsの場合はCR+LFであることが多いので¥r¥nとなります。

改行コードとマッチする正規表現は以下のようなものが考えられます。?は直前のパターンがあってもなくてもよいことを表す正規表現です。どのような改行コードとマッチさせるかをよく考えて適切なパターンを使いましょう。

Pythonの正規表現で改行コードを変換する

ここではPythonの正規表現を使って改行コードを変換するプログラムを紹介します。

動作確認に使用したPythonのバージョン番号は3.9.1です。Python3で動作させてください。

サンプルプログラム(Sample1.py)はUTF-8のテキストファイル(Sample1.txt)を一括して読み込み、正規表現を用いて改行コードを一括変換し、ファイル(Sample1a.txt)に出力しています。

一括して処理しているため、極端に大きなファイルは処理できない場合があるのでご注意ください。

検索パターンpatと置換文字列(改行コード)aftを適当に換えてどうなるかもご確認ください。

なお、出力されたファイルの改行コードを確認して頂くには改行コードが分かるテキストエディタまたはバイナリファイルエディタを用いるか、サンプルプログラム(Visual.py)をご利用ください。

テスト用テキストファイル出力プログラム(Test1.py)

サンプルプログラム(Sample1.py)の入力用テキストファイルを出力するプログラム(Test1.py)です。

data変数に代入している文字列をファイルに出力しているだけのプログラムです。

改行コードを表す記号は正規表現の改行コードと同じ(¥r、¥n)ですので適当に変更してどうなるかを試してみるとよいでしょう。

確認用サンプルプログラム(Visual.py)

上のプログラムの改行コード確認用プログラムです。

改行コード(CR、LF)を検出したら[CR]、[LF]の文字列に置き換えて可視化します。改行コードが分かるエディタを用意するのが面倒なときなどにご利用ください。

まとめ

正規表現と改行について説明しました。プログラミング言語Pythonを用いたサンプルプログラムという形で説明しましたが、正規表現を使えるテキストエディタなどを用いても改行コードの置換を行うことができるものもあります。

テキストエディタ以外にも正規表現を使えるアプリケーションソフトはいろいろありますので是非ご活用ください。

正規表現は使えるようになりますと単純な文字列検索と置換処理ではできないことができるようになって便利です。また改行コードについては知っておくとOS間でテキストファイルのやり取りをするときに思いがけないトラブルにならずに済みます。

Windows 10上ではLinuxが動作するようになりましたので、WindowsとLinux間でテキストファイルのやり取りをすることも増えるかもしれません。そのようなときに活用してみて下さい。

Pythonエンジニア 案件・求人一覧はこちら

インフラエンジニア専門の転職サイト「FEnetインフラ」

FEnetインフラはサービス開始から10年以上『エンジニアの生涯価値の向上』をミッションに掲げ、多くのエンジニアの就業を支援してきました。

転職をお考えの方は気軽にご登録・ご相談ください。

合わせて読みたい

Pythonでできること9つ|できないことや活かせる仕事を紹介... hbspt.cta.load(20723875, '4d5ed975-c4a9-41ec-8e28-71f1d092cb5c', {"useNewLoader":"true","region":"na1"}); Pythonとは? Pythonとは文法がわかりやすくシンプルなプログラミン...
インフラエンジニアにおすすめのプログラミング言語は「Ruby」と「Python」... hbspt.cta.load(20723875, '4d5ed975-c4a9-41ec-8e28-71f1d092cb5c', {"useNewLoader":"true","region":"na1"}); 仮想化やクラウド化が進む昨今、インフラエンジニアもプログラミングを学ぶ必要性が出て...
Python言語の特徴7選|活用した主な事例4選と学習方法3選を紹介... hbspt.cta.load(20723875, '4d5ed975-c4a9-41ec-8e28-71f1d092cb5c', {"useNewLoader":"true","region":"na1"}); Python言語とは まずは、Pythonの基本的な知識と歴史を紹介します。...
【組み込み】C#からPythonを呼び出す方法を紹介... hbspt.cta.load(20723875, '4d5ed975-c4a9-41ec-8e28-71f1d092cb5c', {"useNewLoader":"true","region":"na1"}); 組み込みとは? 一般に、特定の機能を家電製品や機械などに埋め込んで利用すること...
Pythonとは ?IDE(統合開発環境)やPyCharmのショートカットのキーの使い方などを徹底解... hbspt.cta.load(20723875, '4d5ed975-c4a9-41ec-8e28-71f1d092cb5c', {"useNewLoader":"true","region":"na1"}); Pythonとは ? Pythonとは、プログラミング言語の1種です。プログ...