3

これは、このSO質問の拡張です。この質問は、元の質問とは対照的に、2つの異なる囲み文字を考慮しています。

任意の数の(白い)スペースで分割したいのですが、<>AND""の間のすべてを無視します。したがって、この文字列:

string Line = "1  2  <1  2> \"hello world\"   3";

結果は次のようになります。

1、2、<1 2>、「hello world」、3

4

2 に答える 2

3

の代わりにSplit、使用しますMatches

string Line = "1  2  <1  2> \"hello world\"   3";
var parts = Regex.Matches(Line, @"[<\""]{1}[\w \d]+?[>\""]{1}|[\w\d]+")
                 .Cast<Match>()
                 .Select(m=>m.Value)
                 .ToArray();

PS: これは にも一致し"abc def>ます。しかし、正規表現を短くするために無視しました

于 2012-12-14T14:24:52.840 に答える
0

これは私がこれまでに思いついたものです:

public static string[] GetSplitStrings(string input)
{
    IList<string> splitStrings = new List<string>();
    var counter = 0;

    var sb = new StringBuilder();
    var inLessGreater = false; // sometimes <> can contain "
    foreach (var character in input)
    {
    if (character.Equals('<'))
    {
        inLessGreater = true;
        counter++;
    }

    if (character.Equals('>'))
    {
        inLessGreater = false;
        counter++;
    }

    if (character.Equals('"') && !inLessGreater)
    {
        counter++;
    }

    if ((character.Equals(' ') && counter == 0) || (counter == 2))
    {
        if (sb.ToString().Equals("") == false)
        {
        if (character.Equals('"') || character.Equals('>'))
        {
            sb.Append(character);
        }
        splitStrings.Add(sb.ToString());
        }
        sb.Clear();
        counter = 0;
    }
    else
    {
        sb.Append(character);
    }
    }

    return splitStrings.ToArray();
}

きちんとした正規表現ソリューションを好むでしょう。

于 2012-12-14T15:49:47.020 に答える