概要
Pythonで正規表現を使った文字列置換をしたいです.
例えば以下のような文字列を
2.8.0.810? actionset/group0r actionset/group0@7053c5addbb064a28cbc26db1b5e003ebb9fa2f9e157d254bf4c792a14cb05b9 2.8.0.810"(ヨ靺?8ソ{? actionset/group1r actionset/group1@bf696e8a1579e2a8d8067bfef77a2bcffb8724020f9d6f7d9e0821a4f3bc4dbb 2.8.0.810"(ナヨ 8ノ|?
こんな風に置換したいです.
https://d2ktlshvcuasnf.cloudfront.net/Release/2.8.0.810/Android/actionset/group0 https://d2ktlshvcuasnf.cloudfront.net/Release/2.8.0.810/Android/actionset/group1
※置換対象の文字列は大量にあるのですが, これと似たような文字列が大量にあるものと考えてください.
このような文字列置換は適当なエディタを使って
置換前『^[^a-z]?(.+)\x{0012}@[0-9a-f]+\x{001A}\x{0009}([\d.]+).+$』 置換後『https://d2ktlshvcuasnf.cloudfront.net/Release/$2/Android/$1』 置換前『^(?!(https)).*$』 置換後『』 置換前『^[\r\n]』 置換後『』
このように置換をすることができますが, いちいちエディタを起動してコマンドを打つのは億劫ですよね.
実際に書いたコード.遭遇したエラー
そこで, 普段よく使う言語のPythonでこの流れを自動でできないか...と考えて, コードを書いてみました.
Python
1import os 2import re 3import codecs 4 5#文字列内に/が入る(path指定とか)場合rをつけると良い 6TXT='file' 7URL=r'https://d2ktlshvcuasnf.cloudfront.net/Release/$2/'+str(OS)+'/$1' 8f1=r'^[^a-z]?(.+)\x{0012}@[0-9a-f]+\x{001A}\x{0009}([\d.]+).+$' 9f2=r'^(?!(https)).*$' 10f3='[\n\r]' 11 12print('fileを確認します・・・') 13 14with codecs.open(TXT,"r","utf-8","ignore") as f: 15 print('正常に開くことに成功しました') 16 txt0=f.read() 17 txt1=re.sub(f1,URL,txt0) 18 txt2=re.sub(f2,"",txt1) 19 newtxt=re.sub(f3,"",txt2) 20 21with open(TXT+'.txt',"w") as f: 22 f.write(new_txt)
で,書いてみたはいいものの
re.error: incomplete escape \x at position 12
とエラーが出ます.
これは
f1=r'^[^a-z]?(.+)\x{0012}@[0-9a-f]+\x{001A}\x{0009}([\d.]+).+$'
の手前のほうの\xにエラーを吐いてるとわかるのですが,rをつけるのはエスケープを二重につけなくていいようにしているだけなはずで,いまいち何が原因でエラーを吐いているのかがわかりません.
補足
今回は表題の通り,Pythonで正規表現による文字列置換を行う方法を御教授願いたいです.
知恵を貸していただけないでしょうか.
よろしくお願いします.
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。