1

HTTPリクエストから次の文字列が返されました

"keyverified=yes connected=no now=1347429501 debug=Not connected and no params";

ここで、正規表現を使用してさまざまなキー値の組み合わせを抽出したいと思います。私は次のように試しました

var regString = @"keyverified=([a-zA-Z0-9]+)";
        var regex = new Regex(regString, RegexOptions.Singleline);
        var match = regex.Match(str);
        foreach (Group group in match.Groups)
        {
            Console.WriteLine(group.Value);
        }

なぜならkeyverifiedconnectedそれは問題なく動作し、それぞれの値を私に与えますが、regStringを@"debug=([a-zA-Z0-9]+)"それに変更すると、最初の単語、つまりを与えるだけですNot。のように値全体を抽出したいNot connected and no params。どうすればいいですか?

4

4 に答える 4

1

デバッグの場合、正規表現にスペースを追加する必要があります。

@"debug=([a-zA-Z0-9\s]+)"

よりコンパクトな方法で次のように書くことができます。

@"debug=([\w\s]+)"

デバッグ後に他のフィールドがある場合は、フィールド間に適切な区切り文字がないため、フィールド名も一致することを考慮してください。

于 2012-09-12T06:33:34.793 に答える
1

等号の前の項目にはスペースが含まれていないため、先読みを使用できます。

@"debug=([A-Za-z0-9\s]+)(?=((\s[A-Za-z0-9])+=|$))"
于 2012-09-12T06:38:13.967 に答える
0

=キーにスペースや記号が含まれていない可能性があり、値に記号が含まれていない可能性があると仮定すると、次の=ように実行できます。

Regex regexObj = new Regex(
    @"(?<key>  # Match and capture into group ""key"":
     [^\s=]+   # one or more non-space characters (also, = is not allowed)
    )          # End of group ""key""
    =          # Match =
    (?<value>  # Match and capture into group ""value"":
     [^=]+     # one or more characters except =
     (?=\s|$)  # Assert that the next character is a space or end-of-string
    )          # End of group ""value""", 
    RegexOptions.IgnorePatternWhitespace);
Match matchResult = regexObj.Match(subjectString);
while (matchResult.Success) {
    Console.WriteLine("Key: " + matchResult.Groups["key"].Value);
    Console.WriteLine("Value: " + matchResult.Groups["value"].Value);
    matchResult = matchResult.NextMatch();
} 
于 2012-09-12T06:34:56.327 に答える
0

あなたはこれらを試すことができます:

http://msdn.microsoft.com/en-us/library/ms228595(v=vs.80).aspx

http://www.dotnetperls.com/regex-match

于 2012-09-12T06:35:12.250 に答える