2010-11-30 6 views
0

を呼び出しますE、 "(G)/ {H})"、 "1" == "1"のメソッドパラメータ、およびCおよびKのインデックス値。 。パラメータは任意の文字を含むことができ、文字列は任意の数のプロパティおよび/またはメソッドを含むことができる。の.Net C#の正規表現は、私は次のように文字列を解析しようとしている

私はその仕事をする正規表現を探しています。これまでのところ私は

(?<=\.)(?< PropertyOrMethodName>\w+)((\\[(?< Index>\w+)\\])|((?< Open>\\()(?< Parameters>.+)(?<-Open>\\))(?(Open)(?!))))?

を思い付いたが、それは良い例ではありません上記サンプルキャプチャD(E).F( "(G)/ {H})"、 "1" == "1")。

+1

これ、私には、少なくとも、正規表現でHTMLを解析しようとしているような*少し*ビットの音 - でちょうど約なんとか**いくつかの**ケースがありますが、エッジケースに対処する堅牢なものが必要な場合は、代わりに状態ベースのパーサを記述する必要があります。 –

+0

あなたは正しいですが、いくつかのファンキーな正規表現は私の問題を素早く解決することができますが、パーサは適切なものです...ありがとう – pRintLn

+0

あなたが望むものは可能かもしれませんが、率直に言って、 **多くの詳細が欠けているからです。インデクサは常にシンプルですか?文字列の外側にネストされたかっこを入れることはできますか?ネストされた中かっこか角かっこはどうでしょうか?あなたは本当にC#を解析しようとしていますか、それとも他の言語ですか?そして最も重要なのは、あなたの期待される成果は? – Kobi

答えて

1

解析するサンプル数が非常に限られていない限り、正規表現ではまったく良い結果を得られないと思います。もしそのような場合は、サンプルを与えるほうがよいでしょう。あなたの質問の可能な行。例えば

:あなたが正常にこのおよびその他の複雑な例(幸運)を解析することができます正規表現を考え出す

public void SomeMethod(int x) 
    { 
    foo.bar.baz(x, y => qux(y))[(x - 1)] = e.value; 
    } 

場合であっても - fooが、名前空間で、クラスのバー、静的メソッドをバズ?または現在の型のフィールドをfooにし、そのプロパティをbarに、bazをインスタンスメソッドにバインドしますか?パーサーがなければ、各要素の意味を全く理解できません。

私はパーサを見てお勧めします - このSO質問で起動してみてください:Parser for C#

関連する問題