前提・実現したいこと
現在、HTMLデータから抽出したテキストの表記揺れを排除し、「宇宙世紀」の部分を「U.C.」という表記に統一したリストを出力できるようにすることを目的としたプログラムを作成しており、例としてリスト内の「宇宙世紀0079」を「U.C.0079」に表記を統一したい、といった感じです。
発生している問題・エラーメッセージ
しかし、数字と文字列が同時に含まれるリスト内部の、一部分だけを置き換えを行なう方法がわからず苦戦しています。
該当のソースコード
python3系
1#coding:utf-8 2import re 3from bs4 import BeautifulSoup 4import pandas as pd 5 6results_hi = []#年号を格納しておく関数 7 8absobe_pattern_history = 'U.C.[0-9]{4}|宇宙世紀[0-9]{4}'#宇宙世紀の年号 9 10# encoding は取得したページの文字コードを選択 11filepath = '/home/urai/crawling/gandamu/gandamu uchuuseiki/26.html' 12with open(filepath , encoding='utf-8') as f: 13 html = f.readlines() 14 for i in html: 15 soup = BeautifulSoup(i, 'html.parser')#SoupでHTMLからデータを取る 16 for text in soup.find_all(text=True):#Tabを取り除く 17 if text.strip():#テキストであるか判定 18 #print(text) 19 results_hi.append(re.findall(absobe_pattern_history, text))#条件に適合した文(年号)を抽出、results_hiに格納 20 f.close() 21 22 UC_history = [hi[0] for hi in results_hi if hi != []]#抽出データから空のリストを取り除いた上で、入れ子構造を解消 23 24 UCH = ",".join(UC_history) 25 UC_history2 = UCH.replace('宇宙世紀[0-9]{4}', 'U.C.[0-9]{4}')#"宇宙世紀"の部分を"U.C."に置き換え 26 UCH2 = UC_history2.split(",") 27 28 his_list = sorted(set(UCH2), key=UCH2.index)#リスト内部の重複を排除 29 30 his_list.sort()#年代順に並び替える 31 32 print(his_list) 33
出力 ['U.C.0001', 'U.C.0058', 'U.C.0063', 'U.C.0071', 'U.C.0079', 'U.C.0080', 'U.C.0081', 'U.C.0082', 'U.C.0083', 'U.C.0084', 'U.C.0085', 'U.C.0087', 'U.C.0088', 'U.C.0089', 'U.C.0090', 'U.C.0091', 'U.C.0092', 'U.C.0093', 'U.C.0094', 'U.C.0095', 'U.C.0096', 'U.C.0097', 'U.C.0099', 'U.C.0100', 'U.C.0104', 'U.C.0105', 'U.C.0106', 'U.C.0107', 'U.C.0120', 'U.C.0122', 'U.C.0123', 'U.C.0133', 'U.C.0136', 'U.C.0140', 'U.C.0143', 'U.C.0149', 'U.C.0153', 'U.C.0168', 'U.C.0169', 'U.C.0203', 'U.C.0218', 'U.C.0223', 'U.C.0653', 'U.C.1000', '宇宙世紀0001', '宇宙世紀0058', '宇宙世紀0068', '宇宙世紀0079', '宇宙世紀0080', '宇宙世紀0083', '宇宙世紀0087', '宇宙世紀0088', '宇宙世紀0093', '宇宙世紀0096', '宇宙世紀0097', '宇宙世紀0100', '宇宙世紀0103', '宇宙世紀0104', '宇宙世紀0105', '宇宙世紀0120', '宇宙世紀0121', '宇宙世紀0122', '宇宙世紀0123', '宇宙世紀0133', '宇宙世紀0136', '宇宙世紀0140', '宇宙世紀0149', '宇宙世紀0153', '宇宙世紀0203', '宇宙世紀0218', '宇宙世紀0223']
試したこと
上記ソースコードの以下の部分でテキスト置き換えを試みましたができませんでした。
UCH = ",".join(UC_history) UC_history2 = UCH.replace('宇宙世紀[0-9]{4}', 'U.C.[0-9]{4}')#"宇宙世紀"の部分を"U.C."に置き換え UCH2 = UC_history2.split(",")
補足情報(FW/ツールのバージョンなど)
pythonのバージョンは3.6.5です。
入力である'/home/urai/crawling/gandamu/gandamu uchuuseiki/26.html'はガンダムに関係する複数のWebページから抽出したHTMLデータを一つにまとめたものです。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/01/30 08:22
2019/01/30 08:35