5

私のプログラムでは、変数を書くことができる文字列を書くことができます。

例えば:

私の犬の名前は%x%で、彼の年齢は%y%です。

私が置き換えることができる単語は、の間の任意%%です。したがって、その文字列にどの変数があるかを示す関数を取得する必要があります。

GetVariablesNames(string) => result { %x%, %y% }
4

2 に答える 2

7

正規表現を使用して、変数のように見えるものを見つけます。

変数がパーセント記号、任意の単語文字、パーセント記号の場合、次のように機能するはずです。

string input = "The name of my dog is %x% and he has %y% years old.";

// The Regex pattern: \w means "any word character", eq. to [A-Za-z0-9_]
// We use parenthesis to identify a "group" in the pattern.

string pattern = "%(\w)%";     // One-character variables
//string pattern ="%(\w+)%";  // one-or-more-character variables

// returns an IEnumerable
var matches = Regex.Matches(input, pattern);

foreach (Match m in matches) { 
     Console.WriteLine("'{0}' found at index {1}.", m.Value, m.Index);
     var variableName = m.Groups[1].Value;
}

MSDN:

于 2012-12-09T15:31:17.247 に答える
1

正規表現を使用してオカレンスを取得し、それらをグループ化して、それぞれのオカレンスをカウントできます。例:

string text = "The name of my dog is %x% and he has %y% years old.";

Dictionary<string, int> keys =
  Regex.Matches(text, @"%(\w+)%")
  .Cast<Match>()
  .GroupBy(m => m.Groups[1].Value)
  .ToDictionary(g => g.Key, g => g.Count());

foreach (KeyValuePair<string,int> key in keys) {
  Console.WriteLine("{0} occurs {1} time(s).", key.Key, key.Value);
}

出力:

x occurs 1 time(s).
y occurs 1 time(s).
于 2012-12-09T15:41:02.750 に答える