SwiftUI沼でゆっくり浸る Stringから正規表現で抽出する
こんにちは、川上です。
以前分の
”
Loadした郵便番号Zipを解凍したCSVデータをRAM上のベタStringから展開”から1行毎のString配列の作成する件です。
”
で、さの件の
”
// MARK: == UnZipした1本のcsvのstringをArry化にする
return oneData2AddLineStrArry(onecsvstr)
は、ベタで取得したCSVStringデータを1行分Arryにして、
その後、detail-viewの表示用Arryの作成をするのでした。
”
からの続きです。
北海道分のZipを解凍したベタStringを見ると。
1 2 3 | 01101,"060 ","0600000","ホッカイドウ","サッポロシチュウオウク","イカニケイサイガナイバアイ","北海道","札幌市中央区","以下に掲載がない場合",0,0,0,0,0,0 01101,"064 ","0640941","ホッカイドウ","サッポロシチュウオウク","アサヒガオカ","北海道","札幌市中央区","旭ケ丘",0,0,1,0,0,0 ・・・ |
で、このベタベタTextから、”0941″より、”0640941”を抽出を正規表現で書くと
1 | "[0-9]{3}0941" |
で、抽出をテストしてみると
1 2 3 | 北海道 0640941 0420941 |
ちなみに、宮城県や栃木県等のデータから抽出してみると。。。
1 2 3 4 | 宮城県: 9810941 栃木県: 3210941 |
で、正規表現で汎用に抽出できていたのでした。
でもって、1行分毎のArryを抽出してみたのは、
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | func oneData2AddLineStrArry(_ getdatastr:String) -> [String] { var compArry:[String] = [] // 正規文字 ・・・ 1行分の文字列 let ptnstr = "[0-9]{5}.*[01],[01]" var ans: [String] = [] if getdatastr.pregMatche(pattern: ptnstr, matches: &ans) { print("🟦 マッチしました") for ansstr in ans { let linestr = ansstr compArry.append(linestr) } } else { print("== 🟥 マッチしていません") } print("compArry.count=\(compArry.count)") return compArry } |
if getdatastr.pregMatche(pattern: ptnstr, matches: &ans)
は、正規表現で使ったStringのextension の関数を追加して使用したのでした。
コマゴマでちびりちびりして、次回へと続くのでした。。
ではでは。。