1

次のテキストを一致させたい:

(valuex) AnySingleWord (valuey)

括弧内にvaluex,valueyのテキストをキャプチャしたいと考えています。難しいのは、valuex,valuey の両方に括弧を含めることができることです。例えば

((value1) AnySingleWord (value2)) AnySingleWord ((value3) AnySingleWord (value4))

次に、私のvaluex

(value1) AnySingleWord (value2) 

そして価値があるべきです

(value3) AnySingleWord (value4)

正規表現は、通過した開き括弧の数をカウントするようなことを行い、右の閉じ括弧が見つかるまで照合できますか? どうもありがとう。

PS: 正規表現で解けるほど小さければ、開き括弧と閉じ括弧のペアの数を 2 ~ 3 に制限できます。

4

3 に答える 3

2

はい、次のパターンを使用できます。

\(((?>\((?<DEPTH>)|\)(?<-DEPTH>)|[^()]+)*(?(DEPTH)(?!)))\)

この種のパターンの詳細については、次を参照してください。

http://blogs.msdn.com/b/bclteam/archive/2005/03/15/396452.aspx

于 2013-06-20T18:30:27.483 に答える
1

あなたの正規表現は

(?<left>\(([^()]*(\([^()]*\))?[^()]*)+\))[^()]*(?<right>\([^()]*((\([^()]*\))?[^()]*)+\))

あなたのコードは

Match m=Regex.Match(inp,reg);
m.Groups["left"].Value;//left value
m.Groups["right"].Value;//rightvalue
于 2013-06-20T18:31:14.973 に答える
1

私があなたを正しく理解している場合、非常に簡単な方法は次のとおりです。

1. iterate through characters
2. find first left brace
3. count braces until non-paired right brace appears and store index
4. take the substring from zero to that index and set as value x
5. delete value x substring
6. go to step 1 and store next part as value y
于 2013-06-20T18:24:24.207 に答える