2011-09-15 6 views
2

C#では、* | variablename | *というフレーズにvariablenameを取り込む必要があります。C#Regexはどのようにして* |と| *?

私はこの正規表現を持っている:|変数名| *、またはスターバー文字を含む文字列Regex regex = new Regex(@"\*\|(.*)\|\*");

オンライン正規表現テスターは、「変数名」を返しますが、C#のコードでは、*を返します。なぜ私はこの戻り値を経験しているのですか?

ありがとうございます!

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Text.RegularExpressions; 

namespace RegExTester 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      String teststring = "This is a *|variablename|*"; 
      Regex regex = new Regex(@"\*\|(.*)\|\*"); 
      Match match = regex.Match(teststring); 
      Console.WriteLine(match.Value); 
      Console.Read(); 
     } 
    } 
} 

//Outputs *|variablename|*, instead of variablename 

答えて

12

match.Valueは完全一致を含みます。これには、正規表現で指定した区切り文字が含まれます。正規表現をテストしてRegexPalと入力すると、*|variablename|*がハイライト表示されます。

あなたが唯一のキャプチャグループ(括弧内のもの)を取得したいので、使用match.Groups[1]

String teststring = "This is a *|variablename|*"; 
Regex regex = new Regex(@"\*\|(.*)\|\*"); 
Match match = regex.Match(teststring); 
Console.WriteLine(match.Groups[1]); 
+0

おかげBoltClock!もし私が持っていれば 文字列teststring = "これは\ *可変である| \ * ok my \ * | friend | \ *"; MatchCollectionアプローチを使用する必要がありますか、そのGroupメソッドは機能しますか? –

+0

MatchCollectionが必要です。これは 'MatchCollection matches = regex.Matches(teststring)'を意味します。コレクション内の* each *マッチの 'Group'プロパティを使用します。ただループします。 – BoltClock

+0

素晴らしい感謝! –

関連する問題