奥村 晴彦 キャッシュレス消費者還元事業登録リストのCSV化
よくわからなかったので自分なりにコメント追加
import sys import re category = 0 # 固定店舗用 正規表現セット # [^ ]は半角スペース以外 regexp = r"([\d,]+) ([^ ]+) ([^ ]+) (.+) ([^ ]+) ([^ ]+) (\d+%)$" # 範囲設定 rangelim = 8 for line in sys.stdin: # 行末空白文字削除 line = line.rstrip() # カンマ付き数字があるか? m = re.search(r"([\d,]+) ", line) # マッチしなかった場合は次行へ if not m: continue # カンマ付き数字のカンマを除去、整数変換 n = int(re.sub(",", "", m.group(1))) # Noが1の時は次のカテゴリー if n == 1: category += 1 # EC・通信販売の場合 if category == 2: # EC・通信販売 正規表現セット regexp = r"([\d,]+) (.+) (\d+%)$" # 範囲設定 rangelim = 4 # 現在のNoと直前のNo+1が違う場合は次行へ elif n != nprev + 1: continue # 現在のNoを登録 nprev = n # 行末が%ではない場合は次行の文字と結合 while not re.search(r"%$", line): line = line + " " + sys.stdin.readline().strip() # 正規表現適用 m = re.search(regexp, line) # マッチした場合 if m: # Noを表示 print(n, end="") # 2番目以降のマッチを順次表示 for i in range(2, rangelim): print("," + m.group(i).strip(), end="") # 改行 print() # マッチしなかった場合 else: print("###", line) # error