2009-08-24 18 views
1

...そして最後の「IndexOfメソッドとストリングを使用しての問題は、それが最初になるということです 」を引用言うことができます間の文字列を取得する方法がある」ではなくペアが。同様文字列関数間?

『こんにちは』 "それは

こんにちはを取得します

"" WWWWWEEEEEE "なぜ" "どうして" WWWWWEEEEEE" ARE

私はそれが配列を取得したい>こんにちは、なぜ、WWWWEEEEEE

これを行う方法はありますか?

答えて

7

何かこれはどうですか?

StringCollection resultList = new StringCollection(); 
try 
{ 
    Regex regexObj = new Regex("\"([^\"]+)\""); 
    Match matchResult = regexObj.Match(subjectString); 

    while (matchResult.Success) 
    { 
     resultList.Add(matchResult.Groups[1].Value); 
     matchResult = matchResult.NextMatch(); 
    } 
} 
catch (ArgumentException ex) 
{ 
    // Syntax error in the regular expression 
} 

subjectString"こんにちは" "なぜ、あなたに含むリストを与えるべきである "WWWWWEEEEEE"、" AREた場合:

  • WWWWWEEEEEE
  • されている理由

    • こんにちは

    • 代わりに静的Regexクラスを使用し、ちょうどコレクションに追加するのではなく、コンソールに試合を書き込み、よりコンパクトな例:

      var subject = "\"Hello\" \"WHY ARE\" \"WWWWWEEEEEE\""; 
      var match = Regex.Match(subject, "\"([^\"]+)\""); 
      
      while (match.Success) 
      { 
          Console.WriteLine(match.Groups[1].Value); 
          match = match.NextMatch(); 
      } 
      
    +0

    私が知る限り、try-catchを削除することで簡単にすることができます。なぜなら、一度実行すると、正規表現に構文エラーが含まれていないことが分かっているからです。 – Svish

    +1

    スペースを入れておきたい場合は、引用符とグループを削除して完全一致を取ることができます。 ''(^ "] +)" 'を' [^ "] +'に、 'match.Groups [1] .Value'を' match.Value'に置き換えてください。 – Svish

    2
    string s = '"Hello" "WHY ARE" "WWWWWEEEEEE"' 
    string[] words = s.Split('"'); 
    // words is now ["Hello", " ", "WHY ARE", " ", "WWWWWEEEEEE"] 
    

    あなたは['"Hello', "WHY ARE", 'WWWWWEEEEEE"']を取得します。その場合には、空の文字列を、あなたは'" "'によって分割することができ、したくない場合。

    一方、正規表現を使用すると、必要なものに対して最適な解決策になる可能性があります。私はC#の専門家ではないので、頭の上からコードを与えることはできませんが、これはあなたが使いたい正規表現です:"(.*?)"

    +0

    これは機能しません。それはoとwの間にすべてのものを持つでしょう。私はほんのHELLOなどがほしいです。 –

    +0

    '(。*?)'の代わりに '(。*?)'を使用すると効率が良くなります。空のものはスキップします。例えば、 "" " – Svish

    +0

    [^ "] +)がより効率的です。そうです。しかし、OPは彼が空のものを捕まえたくないとは言わなかった。 –

    0
    string s = '"Hello" "WHY ARE" "WWWWWEEEEEE" 
    s.replace("\" \"", "!*!"); // custom seperator 
    s.Replace('"', string.empty); 
    string[] words = s.Split('!*!'); 
    

    は、トリック、

    優しさ、

    を行う必要があります

    ダン

    +0

    これは[Hello、WHY、ARE、WWWWWEEEEEE] –

    +0

    良い点を与えるだろう、今編集中:) –

    0

    また、そのパラメータが言うように、持っているString.IndexOf(char value, int startIndex)方法、開始インデックスを使用することができ、そこからスキャンが開始されます。

    int start = 0; 
    do 
    { 
        int i1 = s.IndexOf('=', start); 
        if (i1 < 0) break; 
    
        int i2 = s.IndexOf('=', i1 + 1); 
        if (i2 < 0) break; 
    
        yield return s.Substring(i1, i2 - i1); 
        start = i2 + 1; 
    } 
    while (start < s.Length);