1

私は現在、正規表現を使用して中括弧のセットの間に存在する文字列から値を取得するという比較的単純なタスクを達成しようとしています。私が書いた式は、テストした多くのオンライン ツールで問題なく動作しますが、.NET ではそうではありません。

String str= "{Value1}-{Value2}.{Value3}";
Regex regex = new Regex( @"\{(\w+)\}");

MatchCollection matches = regex.Matches(str);

foreach(Match match in matches)
{
    Console.WriteLine(match.Value);
}

「Value1」、「Value2」、「Value3」の 3 つの一致が得られると予想されます。ただし、.NET は括弧、つまり "{Value1}"、"{Value2}"、"{Value3}" も返します。

これをどのように達成できるかについての助けは素晴らしいでしょう。

4

3 に答える 3

4

キャプチャ グループ(...)を使用したので、必要なものは次の場所にありますGroups[1]

Regex regex = new Regex(@"\{(\w+)\}");

MatchCollection matches = regex.Matches(str);

foreach (Match match in matches) {
    Console.WriteLine(match.Groups[1].Value);
} 

もう 1 つの方法は、ゼロ幅アサーションを使用することです。

Regex regex = new Regex(@"(?<=\{)(\w+)(?=\})");

MatchCollection matches = regex.Matches(str);

foreach (Match match in matches) {
    Console.WriteLine(match.Value);
} 

このように、正規表現は前後に\w+and があるものを検索{します}が、これら 2 つの文字は一致の一部にはなりません。

于 2015-03-05T10:47:12.533 に答える
2

ルックアラウンドを使用できます。

Regex regex = new Regex( @"(?<=\{)(\w+)(?=\})");

または一致したグループ #1 を使用します。

于 2015-03-05T10:47:27.407 に答える