2011-07-11 26 views
2

文字列プレースホルダを検索できるメソッドを作成しました。これは正規表現で行います。 現時点では、グループ化機能を追加してこの方法を拡張しようとしています。例えば文字列プレースホルダと正規表現

私はこの文字列がある場合:手紙をそこに立っていても、文字列test1のため

  1. 検索::(グラムのように:)その前に

    "Hallo {g:test1} asdasd {p:test1} sdfsdf{o:test1}" 
    

    を私はにしたいです。

  2. 私は検索したい:すべての文字列、例えばa g:それの前に。

私は実際にC#でこれを行う方法を理解できません誰かが私を助けることができますか?私はこれをプログラムする瞬間

private string test() { 
     string pattern = @"\{(.*?)\}"; 
     string query = "Hallo {g:test1} asdasd {p:test1} sdfsdf{o:test1}"; 

     var matches = Regex.Matches(query, pattern); 

     foreach (Match m in matches) { 
     Test = m.Groups[1].Value; 
     } 

     return Test; 
    } 
+0

正規表現は大丈夫です - 問題がありますか? – BonyT

+0

この正規表現は、大括弧で囲まれた文字列を検索します。しかし、今私は、たとえg:がその前に立っていても、大括弧の中にtest1の文字列を見つけたいと思います。 期待通り: "test1" しかし: "o:test1" そして私はまた、私はすべての文字列を見つけることができるように関数が欲しい(例えば)g:それの前に、この場合は、結果test1する必要があります – abe

答えて

3

はこれを試してみてください:

\{(?:.:)?(.*?)\} 

それは私がテキストではなくマッチしますそれ以前の文字とコロンを除いて。

は、その前に特定の文字を含む文字列にこれを制限するには:

\{(?:#:)(.*?)\} replacing # with the letter you are filtering on 

例えば

\{(?:g:)(.*?)\} 
+0

これは正しいです。 しかし、今のステップ2では、gで文字列を検索する場合は、その前にoまたは、:または任意の文字を前に検索する必要があります。 – abe

+0

これを試します – abe

+0

最後の解決策には1つの問題しかありません。私は例えば:文字列クエリ= "ハロー{g:test2} aaaa {g:test3} asdasd {p:test1} sdfsdf {o:test1}"; それはtest3だけを選択し、それはtest2とselect3を選択する必要があります、私はそれらを配列に配置する必要がありますか? – abe

0
  1. \{.:test1\}
  2. \{g:.+?\}
+0

私はこれとは思わない – abe