2012-01-26 5 views
1

これは非常に基本的な正規表現の質問ですが、どこが間違っているのかよく分かりません。C#の2つのマーカー文字の間に可変長文字列を見つけるにはどうすればよいですか?

string exp = @"$a$ + $ab$";

マッチパターン$....$をし、元の文字列にその値を置き換えます

は、私はこのような入力文字列を取るしようとしています。たとえば、数字1を $a$に、数字2を $ab$に置き換えたいので、最終的な文字列は "1 + 2"のようになります。

private string SubstituteStandardValues(string exp) 
{ 
    //Find Std values w/Regex 
    Match match = Regex.Match(exp, @"/\($.*$\)/s", RegexOptions.IgnoreCase); 

    if (match.Success) 
    { 
     foreach (var m in match.Groups) 
     { 
      //Do string replace logic here! 
     } 
    } 
    return exp; 
} 

私の問題はmatchは常にfalseであり、私の正規表現が間違っていると信じて私をリード:

は私が設定していることは、次の関数です。

どこが迷子になりましたか?助けてくれてありがとう! .NETの正規表現なし修飾子( "/ S")には正規表現区切り文字( "/")がありません

@"\$[^$]+\$" 

+0

のために/ \は何ですか?また、貪欲でない怠惰なマッチを使用したいかもしれません。 –

+0

Regexとは別に、単純な 'exp.Replace(" $ a $ "、" 1 ")。Replace(" $ b $ "、" 2 ")' would仕事も。 –

答えて

1

このコードを使用してみてください:

public string SubstituteStandardValues(string exp) 
{ 
    var matches = Regex.Matches(exp, @"\$[a-z]+\$", RegexOptions.IgnoreCase); 

    foreach (Match match in matches) 
    { 
     // replace logic here... 
    } 

    return exp; 
} 
4

あなたの正規表現パターン文字列はこれです。それにはRegexOptionsを使用してください。

$は、エスケープしないか、文字クラスに属していない限り、「end-of-string」を意味します。

"$以外のもの"([^$])と一致する文字クラスが必要です。

マッチ全体はあなたが興味のあるものをされている場合は、グループを必要としません。

-1

あなたは「(」それは文字通りを探していることを意味する、括弧のインフロント、バックスラッシュを入れていると " )」。しかし、ドル記号をエスケープする必要があります。また、遅延量子を使用していません。

​​
+0

スラッシュとは何ですか? – Tomalak

関連する問題