python 正規表現 複数 変換

PC

Pythonで文字列変換をする際、変換したい文字列を正規表現で指定していた場合の対処の仕方です。
正規表現で指定しているっていうことはですね。
文字列がある程度の規則性はもっているものの、決して一種類ではないから正規表現にしているわけですが、これをまたある規則に則って変換するとなると結構ハードルがありました。

例えば、文章の中にファイルとか画像へのリンクを混ぜておくとかいう場合、下書き段階ではサクサク書きたいのでざっくりとそのファイル名だけ仮置しておく、なんてことがあるわけです。
ファイル名が「test1.jpg」とかだったら、「##test1.jpg##」といった具合に。
一つの文章の中に複数個こういうものが出てきたとして、それぞれ「##test2.jpg##」とか「##test3.jpg##」とかにして文章は書きなぐります、と。
で、それをいざ本番環境に書き写す際にどうしたら楽に変換できるだろうか、というところで頭を使ってみました。
正規表現としては「##.*##」となります。
で、必要な処理としては、前後の「##」を削った上でファイルの格納場所を指定するハイパーリンク相当の何かを付け足す、となります。
で、最初は単純に変換式を書いたんですね。

import re

img_fle_s = re.search('##.*##', sentense)[0]
img_fle = img_fle_s.replace('#', '')
sentense = re.sub(img_fle_s,'<img src="' + url_img + img_fle + '" alt="' + title + '" width="320" />',sentense)

実行してみて気づきましたが、これ、一番最初に出てくる「##.*##」を満たすファイル名で全部変換されちゃうんですね。
最初に一回しかファイル名を特定していないので当たり前なんですが。

それで考えたのが、for文で上から順に正規表現にひっかかるものを処理していく、というやり方。

import re

cnts_img_fle = len(re.findall('##.*##', sentense))
for i in range(0, cnts_img_fle):
     img_fle_s = re.search('##.*##', sentense)[0]
     img_fle = img_fle_s.replace('#', '')
     sentense = re.sub(img_fle_s,'<img src="' + url_img + img_fle + '" alt="' + title + '" width="320" />',sentense)

文章中、正規表現に引っかかる箇所の個数を最初に特定してやり、その個数分だけ上から順に変換をかける、と。

これでうまくいきました。

Python本

入門Python3 第2版 [ Bill Lubanovic ]
入門Python3 第2版 [ Bill Lubanovic ] 4,180円(税込)【送料込】

楽天ブックス

Bill Lubanovic 鈴木 駿 オライリー・ジャパンニュウモンパイソンスリーダイニハン ビル ルバノビック スズキ ハヤオ 発行年月:2021年03月22日 予約締切日:2021年01月27日

Pythonでつくる ゲーム開発 入門講座 [ 廣瀬豪 ]
Pythonでつくる ゲーム開発 入門講座 [ 廣瀬豪 ] 2,948円(税込)【送料込】

楽天ブックス

廣瀬豪 ソーテック社パイソンデツクル ゲームカイハツ ニュウモンコウザ ヒロセツヨシ 発行年月:2019年07月19日 予約締切日:2019年06月10日 ページ数:376p サイズ:単行本 ISBN

Python実践入門 ── 言語の力を引き出し、開発効率を高める [ 陶山 嶺 ]
Python実践入門 ── 言語の力を引き出し、開発効率を高める [ 陶山 嶺 ] 3,278円(税込)【送料込】

楽天ブックス

陶山 嶺 技術評論社パイソンジッセンニュウモン ゲンゴノチカラヲヒキダシ カイハツコウリツヲタカメル スヤマ レイ 発行年月:2020年01月24日 予約締切日:2019年12月11日 ページ数:36

Python 1年生 体験してわかる!会話でまなべる!プログラミングのしくみ [ 森 巧尚 ]
Python 1年生 体験してわかる!会話でまなべる!プログラミングのしくみ [ 森 巧尚 ] 2,178円(税込)【送料込】

楽天ブックス

森 巧尚 翔泳社パイソンイチネンセイ タイケンシテワカルカイワデマナベルプログラミングノシクミ モリ ヨシナオ 発行年月:2017年12月05日 予約締切日:2017年11月28日 ページ数:192p

Python2年生 スクレイピングのしくみ 体験してわかる!会話でまなべる! [ 森 巧尚 ]
Python2年生 スクレイピングのしくみ 体験してわかる!会話でまなべる! [ 森 巧尚 ] 2,420円(税込)【送料込】

楽天ブックス

森 巧尚 翔泳社パイソンニネンセイ スクレイピングノシクミ タイケンシテワカル カイワデマナベル モリ ヨシナオ 発行年月:2019年10月04日 予約締切日:2019年08月01日 ページ数:192

楽天ウェブサービスセンター
タイトルとURLをコピーしました