大阪市中央区 システムソフトウェア開発会社

営業時間:平日09:15〜18:15
MENU

SwiftUI沼でゆっくり浸る Stringから正規表現で抽出する

著者:川上洋
公開日:2022/08/06
最終更新日:2022/08/06
カテゴリー:技術情報 雑記
タグ:

こんにちは、川上です。

以前分の

Loadした郵便番号Zipを解凍したCSVデータをRAM上のベタStringから展開”から1行毎のString配列の作成する件です。

で、さの件

// MARK: == UnZipした1本のcsvのstringをArry化にする
return oneData2AddLineStrArry(onecsvstr)
は、ベタで取得したCSVStringデータを1行分Arryにして、
その後、detail-viewの表示用Arryの作成をするのでした。

からの続きです。

北海道分のZipを解凍したベタStringを見ると。

         
  01101,"060  ","0600000","ホッカイドウ","サッポロシチュウオウク","イカニケイサイガナイバアイ","北海道","札幌市中央区","以下に掲載がない場合",0,0,0,0,0,0    
  01101,"064  ","0640941","ホッカイドウ","サッポロシチュウオウク","アサヒガオカ","北海道","札幌市中央区","旭ケ丘",0,0,1,0,0,0
・・・

で、このベタベタTextから、”0941″より、”0640941”を抽出を正規表現で書くと

"[0-9]{3}0941"

で、抽出をテストしてみると

北海道
 0640941
 0420941

ちなみに、宮城県や栃木県等のデータから抽出してみると。。。

宮城県:
 9810941
栃木県:
 3210941

で、正規表現で汎用に抽出できていたのでした。

でもって、1行分毎のArryを抽出してみたのは、

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 の関数を追加して使用したのでした。

コマゴマでちびりちびりして、次回へと続くのでした。。
ではでは。。

    上に戻る