LoginSignup
0
0

More than 1 year has passed since last update.

Pythonで複数行の文字列を複数行の文字列に置換する

Posted at

Pythonで複数行に渡る文字列を別の文字列へ置換したい場合、reモジュールのre.DOTALLを指定してre.sub()を使用する。

サンプルコード解説

以下は、ファイルの中の複数行の文字列に一致する箇所を新たな複数行の文字列に置換し、同名のファイルとして保存するサンプルコードとなる。

multiline_convert.py
#!/usr/bin/env python3
import sys
import re

target = r'\tfor \(hoge\) {\n\t\thogehoge;\n\t}*'

replace = """	if (hoge) {}
		for (hoge) {
			hogehoge;
		}
	}"""

f1 = open(sys.argv[1],'r')
f2 = open(sys.argv[1]+"_new",'w')
body = f1.read()
distbody = re.sub(target, replace, body, flags=re.DOTALL)
f2.write(distbody)
f1.close()
f2.close()
os.remove(sys.argv[1])
os.rename(sys.argv[1]+"_new", sys.argv[1])

targetはタブや改行も含め、すべて正規表現で記述する必要がある。
サンプルコードでは以下の文字列を意図している。

	for (hoge) {
		hogehoge;
	}

replaceは改行を含む文字列として記述できる。
サンプルコードでは以下の文字列を意図している。

	if (hoge) {}
		for (hoge) {
			hogehoge;
		}
	}

サンプルコードの呼び出し方法

サンプルコードを使う時は以下のように呼び出す。

python multiline_convert.py hoge.txt

サンプルコードに記載したtargetreplaceの場合だと、以下のような結果となる。

hoge.txt(置換前)
hoge1
hoge2

	for (hoge) {
		hogehoge;
	}

eof
hoge.txt(置換後)
hoge1
hoge2

	if (hoge) {
		for (hoge) {
			hogehoge;
		}
	}

eof

おわりに

ターゲットにする複数行文字列を正規表現での文字列に変換できるスクリプトが欲しい

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0