トップページに戻る    次の正規表現パズルへ    前の正規表現パズルへ

5-9 行単位での整形その2

正規表現パズル

置換を使って、
A=数値,B=数値,C=数値,D=数値
が順不同で並んでいるデータを
行ごとに、
A=数値,B=数値,C=数値,D=数値
の順に整形する。

ただし、D=数値が存在しないデータは、
A=数値,B=数値,C=数値,
の形に整形する。

置換前


置換後


対象データ

A=91,B=6,C=31
A=82,B=5,C=9
A=73,C=4,B=13
A=64,C=3,D=94,B=7
A=55,B=85,C=6
A=46,D=1,C=76,B=5
B=37,A=9,C=67,D=4
B=28,A=8,D=58,C=3
B=19,C=7,A=49,D=2
B=91,C=6,A=1
B=82,D=5,A=22,C=9
B=73,D=4,C=13,A=8


正規表現

^(?=.*(A=\d+))(?=.*(B=\d+))(?=.*(C=\d+))(?:(?=.*(D=\d+))|(?!.*(D=\d+))).*
を
\1,\2,\3,\4\5
に置換


解説

肯定先読みで、キャプチャしてます。

(?:(?=.*(D=\d+))|(?!.*(D=\d+)))
は、ブール代数の補元法則である
    _
A + A = 1
より、必ず真になります。
そして、必ず片方のみのキャプチャが空となります。