0

VB.net を使用して文字列から値を取得する方法がわかりません。

テキストボックスに次のような文字列がある場合:

WWW-Authenticate: Digest realm="MyServer",qop="auth",algorithm="MD5",maxbuf=1000,nonce="3b010c090c0a0000c0a80157c7007f03c5",opaque="4e6573732041636365737320436f6e74"

文字列の = の後の各値を取得するにはどうすればよいですか。

使ってみました

Dim s = "WWW-Authenticate: Digest realm='MyServer',qop='auth',algorithm='MD5',maxbuf=1000,nonce='3b010c090c0a0000c0a80157c7007f03c5',opaque='4e6573732041636365737320436f6e74'"
                        Dim pattern = "="
                        Dim matches = Regex.Matches(s, pattern)
                        Dim values = matches.OfType(Of Match).Select(Function(m) m.Value)

                        For Each v In values
                            MsgBox(v)
                        Next

ただし、メッセージボックスに = のみが返されます。

=記号の後の部分だけを取得できるようにしたい。

誰でも助けることができますか?

以下を使用してみましたが、文字列に realm= qop= などが含まれています。(ただし、次の項目の最後に含めます。

 Dim s = "WWW-Authenticate: Digest realm='Ness Access Control',qop='auth',algorithm='MD5',maxbuf=1000,nonce='3b010c090c0a0000c0a80157c7007f03c5',opaque='4e6573732041636365737320436f6e74'"
                        Dim result_array As Array = Split(s, "=", 6)

                        For Each v In result_array
                            MsgBox(v)
                        Next
4

3 に答える 3

2

正規表現!

Imports System.Text.RegularExpressions
Module Module1
    Sub Main()
        Dim s As String = "WWW-Authenticate: Digest realm='MyServer',qop='auth',algorithm='MD5',maxbuf=1000,nonce='3b010c090c0a0000c0a80157c7007f03c5',opaque='4e6573732041636365737320436f6e74'"

        'Regular Expression, matches word before equals, and word after equals
        Dim r As New Regex("(\w+)\='([^']+)'")

        'All the matches!
        Dim matches As MatchCollection = r.Matches(s)
        For Each m As Match In matches
            'm.Groups(1) = realm, qop, algorithm...
            'm.Groups(2) = MyServer, auth, MD5...
            Console.WriteLine(m.Groups(2))
        Next
        Console.ReadLine()
    End Sub
End Module

そして、素敵なキー値ディクショナリのすべてが必要な場合:

    Dim dict As New Dictionary(Of String, String)
    For Each m As Match In matches
        'm.Groups(1) = realm, qop, algorithm...
        'm.Groups(2) = MyServer, auth, MD5...
        dict(m.Groups(1).ToString()) = dict(m.Groups(2).ToString())
    Next
于 2013-02-06T23:49:00.187 に答える
0

split()関数を探しています。

Dim logArray() As String
logArray = Split(s, "=")
For count = 0 To logArr.Length - 1
    MsgBox(logArray(count))
Next
于 2013-02-06T23:33:26.400 に答える
0

特定の文字列拡張子のケース。キーと値を使用して辞書内の特定の書式設定された文字列を変換する方法

Public Module StringModuleExtensions
    <Extension()>
    Public Function ToStringDictionary(ByVal str as String, _
                                      ByVal OuterSeparator as Char, _
                                      ByVal  NameValueSeparator as Char) _
                                      As Dictionary(of String, String)
        Dim dicText = New Dictionary(Of String, String)()
        if Not String.IsNullOrEmpty(str) then
            Dim arrStrings() = str.TrimEnd(OuterSeparator).Split(OuterSeparator)
            For Each s in arrStrings
                Dim posSep = s.IndexOf(NameValueSeparator)
                Dim name = s.Substring(0, posSep)
                Dim value = s.Substring(posSep + 1)
                dicText.Add(name, value)
            Next
        End If
        return dicText
    End Function
End Module

で電話する

Dim test = "WWW-Authenticate: Digest realm=""MyServer"",qop=""auth"",algorithm=""MD5"", maxbuf=1000,nonce=""3b010c090c0a0000c0a80157c7007f03c5"",opaque=""4e6573732041636365737320436f6e74"""
Dim dict = test.ToStringDictionary(","c, "="c)
For Each s in dict.Keys
    Console.WriteLine(dict(s))
Next

(おそらく、前に WWW-Authenticate 行を削除する必要があります。

于 2013-02-07T00:12:23.063 に答える