2016-07-22 6 views
1

私はなぜこれは角かっこで囲まれていないのですか?

var r = new Regex(@"\{(.*?)\}"); 
var m = r.Match("{abc}"); 
Console.WriteLine(m.Groups[0].Value); 

を見ていると私はそれがカッコ、​​の間で何かを得るために期待される一方で、それは私を"{abc}"なってきました。それはValueですか?

また、私はこれが可能かどうかわかりませんが、入れ子になっている場合には一番外側の小柱を取得したいと思います。

"{{abc}" - >"{abc"

+3

と一般的に言えば、正規表現キャプチャデータを含むvarの最初の/ 0番目の引数としてマッチ/キャプチャの原因となった文字列全体を返します。代わりに 'groups [1]'をチェックしてください。 –

+0

ここで正規表現は問題ではありませんが、カッコで囲まれたものを取り除く標準的な方法は、\ {[^}] \} "'です。 – fabianegli

+0

[Match.Groups](https://msdn.microsoft.com/en-us/library/system.text.regularexpressions.match.groups(v = vs.110).aspx): "正規表現エンジンでグループプロパティから返されたGroupCollectionオブジェクトの最初の要素(インデックス0の要素)には、正規表現パターン全体と一致する文字列が含まれています。 –

答えて

3

それは私に "{ABC}" 私はそれが括弧の間で何かを得るために期待される一方で、 "ABC" を取得しています。それは価値ではありませんか?

いいえ、Groups[0]は完全一致ですが、代わりに最初の一致のキャプチャであるGroups[1]を見てください。

マッチキャプチャは、正規表現マッチの(...)と1からnの連続した番号が付けられたものです。他の項目はを一致が、を捕獲し、インデックス0


"{{ABC}" で全試合中に見出されていないが - > "{ABC"

{の横に+のパターンとして{+([^}]+)}を試してください。{の1つ以上を見つけるように正規表現パーサーに指示します。

{+(?<TextBetweenTheBrackets>[^}]+)}

してから値を抽出します。


注時には1が試合に対処する必要はありませんが、その後1試合は、このリテラルの例としてをキャプチャという名前を使用することができ、インデックスをキャプチャかっこの間には

Groups["TextBetweenTheBrackets"].value

関連する問題