スピリット関数でデータを分割する際に文字数限定で

解決


トシ  2008-10-21 23:51:34  No: 145320

VB2008で開発しております、
戸惑ってしまい投稿しました、お世話になります 。
スピリット関数でデータを分割する際に文字数限定で
抜き取ることは可能でしょうか。
"#"一文字限定で抜き出したいのですが、"##"や"###"はデータ
としみなします、なんとかスピリット関数で解決したいと思います
よろしくお願いします。

   Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim dt() As String
        Dim data As String
        data = "TEST1#TEST2#TES##T3#TEST4"
        dt = Strings.Split(data, "#")
        For Each s As String In dt
            Console.WriteLine(s)
        Next
        '上記実行結果
        'TEST1
        'TEST2
        'TES
        '
        'T3
        'TEST4

        '改善後の結果
        'TEST1
        'TEST2
        'TES##T3
        'TEST4
    End Sub


YuO  2008-10-22 01:12:36  No: 145321

Split関数ではどうしようもないです。
正規表現を工夫して,Regex.Split使うのが一番早いかと思います。


特攻隊長まるるう  2008-10-22 02:16:04  No: 145322

どうでもいいけど気になること。
・スピリット  spirit:心,精神
・スプリット  split :分割[分離]する
。。。ボーリングとかしないのかな?


トシ  2008-10-22 03:02:39  No: 145323

Regex.Splitを使い同じ事が出来たのですが正規表現が
難しいです、"#"はOK "##"と"###"はNG  いろいろ調べました
が...分かりません、ご教授お願いします。

Imports System.Text.RegularExpressions

        Dim dt() As String
        Dim data As String
        data = "TEST1#TEST2#TES##T3#TEST4"
        Dim dm As New Regex("#")
        dt = dm.Split(data)
        For Each s As String In dt
            Console.WriteLine(s)
        Next


やじゅ  2008-10-22 03:47:14  No: 145324

"##"や"###"は一度、"@"などの特定の文字に変換してから
スプリットして、特定の文字を元に戻す。

特定の文字は、含まれない文字にする必要がありますけどね。


我龍院  2008-10-22 04:23:48  No: 145325

Dim strData As String = "TEST1#TEST2#TESE######T3#TEST4"
        strData = strData.Replace("##", Chr(2))
        strData = strData.Replace(Chr(2) + "#", Chr(3))
        Dim str() As String = strData.Split("#")
        For i As Integer = 0 To str.Length - 1
            str(i) = str(i).Replace(Chr(3), Chr(2) + "#")
            str(i) = str(i).Replace(Chr(2), "##")
            ListBox1.Items.Add(str(i))
        Next
こんな手もあるが、トリッキーだから、私なら頭から処理してくかな。


YuO  2008-10-22 05:27:15  No: 145326

正規表現でちゃんと表現可能です。

先読みと後読みを使います。
(?<!#)#(?!#)
前に#がなく,後ろに#がない#で分割します。


トシ  2008-10-22 17:52:19  No: 145327

いろいろと、ご回答ありがとうございます。

YuOさんの正規表現素晴らしいです"#"が何個
連続で入っていても問題なしですね(笑)

プログラムに取り込み解決しました
ありがとうございます。


トシ  2008-10-22 17:53:14  No: 145328

解決時チェック入れ忘れました。


※返信する前に利用規約をご確認ください。




  


  このエントリーをはてなブックマークに追加