C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[14]: エスケープされた文字列の分割 [1]


(過去ログ 64 を表示中)

[トピック内 27 記事 (21 - 27 表示)]  << 0 | 1 >>

■36431 / inTopicNo.21)  Re[11]: エスケープされた文字列の分割
  
□投稿者/ 明智重蔵 (2回)-(2009/05/28(Thu) 21:45:03)
明智重蔵 さんの Web サイト
>>Dim strArr As String() = Regex.Split(fromString, "(?<!(;;)*;);#")
>
> の場合に取得出来る値は「aa;;#テスト」になってしまいますね。

あらら
気づかなかったです。
引用返信 編集キー/
■36436 / inTopicNo.22)  Re[10]: エスケープされた文字列の分割
□投稿者/ みきぬ (448回)-(2009/05/28(Thu) 23:24:44)
みなさま、回答ありがとうございます。
おかげさまで自分なりの答えを得ることができましたので、とりあえず解決済みにしようと思います。

1人では決してここまで辿り着くことはできなかったと思います。
また、様々な考え方も教わったことでよい勉強になりました。
重ね重ねありがとうございます。


No36415 (魔界の仮面弁士 さん) に返信
> そういえば、「」が渡された時には、
>  Return New String() {}
>  Return New String() { "" }
> のどちらを返すべきでしょうかね。(後者かな…)
>
処理内容から考えるに、後者のほうが自然な感じがします。
ホントのところは、長さ0の配列で戻ってきたほうが呼び出し元としてはうれしいのですが、
そこは処理を呼び出す前に String.IsNullOrEmpty() で判定すればいいかな、と思っています。
どのみち、null チェックもしておく必要もあるので。


No36425 (明智重蔵 さん) に返信
もしかすると、もっと簡単な正規表現ですむかもしれませんね。
でも、頭がパンク中なのですぐには考えられなさそうです。正規表現は苦手なんですよ(。。;
解決済み
引用返信 編集キー/
■36438 / inTopicNo.23)  Re[11]: エスケープされた文字列の分割
□投稿者/ 明智重蔵 (3回)-(2009/05/29(Fri) 00:17:04)
明智重蔵 さんの Web サイト
多分これで大丈夫です。(一応Javaで似た意味の正規表現で確認)
(?<=(?<!;)(;;)*);#

解決済み
引用返信 編集キー/
■36442 / inTopicNo.24)  Re[12]: エスケープされた文字列の分割
□投稿者/ 魔界の仮面弁士 (1105回)-(2009/05/29(Fri) 01:35:07)
No36438 (明智重蔵 さん) に返信
> 多分これで大丈夫です。(一応Javaで似た意味の正規表現で確認)
> (?<=(?<!;)(;;)*);#

その構文を用いて
 Regex.Split("あい;;;#うえお", "(?<=(?<!;)(;;)*);#")
とした場合、結果は
 「あい」「;;」「うえお」
に分割されることになってしまうかと。
解決済み
引用返信 編集キー/
■36451 / inTopicNo.25)  Re[13]: エスケープされた文字列の分割
□投稿者/ みきぬ (449回)-(2009/05/29(Fri) 09:16:52)
単体テスト用にパターンを作ってみたので参考にしてください。
# 少ないけど、ポイントは抑えたと思う

"" → { "" }
";#" → { "", "" }
";;#" → { ";;#" }
";;;#" → { ";;", "" }
";;;;#" → { ";;;;#" }
"あ;#" → { "あ", "" }
";#あ" → { "", "あ" }
"あ;#い" → { "あ", "い" }
"あ;;#" → { "あ;;#" }
";;#あ" → { ";;#あ" }
"あ;;#い" → { "あ;;#い" }
"あ;;;#" → { "あ;;", "" }
";;;#あ" → { ";;", "あ" }
"あ;;;#い" → { "あ;;", "い" }
"ほげ;;#ほげ;#ふがふ;;;;#が;#ぴよ;;ぴよ" → { "ほげ;;#ほげ", "ふがふ;;;;#が", "ぴよ;;ぴよ" }

上記は分割だけ行う場合のものです。
エスケープ解除も含めた処理の場合は、結果の ";;" を ";" に置換して使ってください。

解決済み
引用返信 編集キー/
■36567 / inTopicNo.26)  Re[13]: エスケープされた文字列の分割
□投稿者/ 明智重蔵 (4回)-(2009/06/01(Mon) 20:07:03)
明智重蔵 さんの Web サイト
No36442 (魔界の仮面弁士 さん) に返信
> その構文を用いて
>  Regex.Split("あい;;;#うえお", "(?<=(?<!;)(;;)*);#")
> とした場合、結果は
>  「あい」「;;」「うえお」
> に分割されることになってしまうかと。


あらら
http://msdn.microsoft.com/ja-jp/library/8yttk7sy(VS.80).aspx
>キャプチャ グループが Regex.Split 表現で使用されている場合、
>そのキャプチャ グループは結果の文字列配列に含まれます。

とあるので、キャプチャは無効化しとかないとダメですね。

Imports System.Text.RegularExpressions

Module Module1
    Sub Main()
        helper("")
        helper(";#")
        helper(";;#")
        helper(";;;#")
        helper(";;;;#")
        helper("あ;#")
        helper(";#あ")
        helper("あ;#い")
        helper("あ;;#")
        helper(";;#あ")
        helper("あ;;#い")
        helper("あ;;;#")
        helper(";;;#あ")
        helper("あ;;;#い")
        helper("ほげ;;#ほげ;#ふがふ;;;;#が;#ぴよ;;ぴよ")

        Console.ReadLine()
    End Sub

    Private Sub helper(ByVal fromStr As String)
        Static No As Integer : No += 1
        Console.WriteLine("split対象" & CStr(No) & "は" & fromStr)

        Dim strArr As String() = Regex.Split(fromStr, "(?<=(?<!;)(;;)*);#", RegexOptions.ExplicitCapture)
        For i As Integer = 0 To strArr.GetUpperBound(0)
            Console.WriteLine(strArr(i).Replace(";;", ";"))
        Next i
    End Sub
End Module

引用返信 編集キー/
■36964 / inTopicNo.27)  Re[14]: エスケープされた文字列の分割
□投稿者/ みきぬ (464回)-(2009/06/10(Wed) 15:57:31)
2009/06/10(Wed) 16:06:42 編集(投稿者)
後日談です。
実は、↓こんなクラスがあることがわかりました。

SPFieldLookupValue クラス
http://msdn.microsoft.com/ja-jp/library/microsoft.sharepoint.spfieldlookupvalue.aspx

[コード]
SPFieldLookupValueCollection collection = new SPFieldLookupValueCollection("1;#ほげ;;#ほげ;#2;#ふがふ;;;;#が;#3;#ぴよ;;ぴよ");
foreach (SPFieldLookupValue item in collection)
{
    Console.WriteLine("ID:{0} Value:{1}", item.LookupId, item.LookupValue);
}

[結果]
ID:1 Value:ほげ;#ほげ
ID:2 Value:ふがふ;;#が
ID:3 Value:ぴよ;ぴよ

o... |rz

引用返信 編集キー/

<前の20件
トピック内ページ移動 / << 0 | 1 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -