前提・実現したいこと
同一の条件にマッチする部分を複数個取り出し、その後置換したい。
発生している問題・エラーメッセージ
半角括弧()で囲まれた部分を操作したいのですが、重複が生じているためか以下のような文字列で()で囲まれた部分を複数個取り出すことができません。
550年 (東魏)が滅亡して(北斉)が建国する:北朝 556年 西魏が滅亡して(北周)が建国する:北朝
この処理が上手くいかないためか、改行を含んで()で囲まれた部分を順次(1) (2) (3)…とすることも
できません。
該当のソースコード
Python import re str = '''502年 斉が滅亡して梁を建国:南朝 534年 (北魏)が東魏、西魏に分裂する:北朝 550年 (東魏)が滅亡して(北斉)が建国する:北朝 556年 西魏が滅亡して(北周)が建国する:北朝 557年 梁が滅亡して(陳)が建国する:南朝 577年 北周が北斉を滅ぼす 581年 (北周)の楊堅が隋を建国する 589年 隋は南朝の(陳)を滅ぼし中国を統一する ''' str_list = str.splitlines() s_regex = re.compile("(.+)") a_list = [] #解答を入れるリストの下準備 for s in str_list: result = s_regex.findall(s) a_list.append(result) print(a_list) print('\n') brank = [] #穴埋め問題を入れるリスト i = 0 #()に番号を振る for s in str_list: f = s_regex.findall(s) if f is not None: i = i + 1 list = s_regex.sub('({0})'.format(i),s) brank.append(list) for s in brank: print(s) #以下は実行結果 [[], ['(北魏)'], ['(東魏)が滅亡して(北斉)が建国する:北朝\u3000556年\u3000西魏が滅亡して(北周)'], ['(陳)'], [], ['(北周)の楊堅が隋を建国する\u3000589年\u3000隋は南朝の(陳)']] 502年 斉が滅亡して梁を建国:南朝 534年 (2)が東魏、西魏に分裂する:北朝 550年 (3)が建国する:北朝 557年 梁が滅亡して(4)が建国する:南朝 577年 北周が北斉を滅ぼす 581年 (6)を滅ぼし中国を統一する
試したこと
[[], ['(北魏)'], ['(東魏)','(北斉)','(北周)'], ['(陳)'], [], ['(北周)','(陳)']]
としたいので、searchやgroup、肯定的先読みなど試しましたが上手くいきません。何かよい方法はないのでしょうか?
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/08/05 12:06