3

C++ .NETのような正規表現で変数にパターンを割り当てる方法を探しています

String^ speed;
String^ size;

「コマンド SPEED=[スピード] SIZE=[サイズ]」

現在、私は IndexOf() と Substring() を使用していますが、かなり醜いです

4

3 に答える 3

3
String^ speed; String^ size;
Match m;
Regex theregex = new Regex (
  "SPEED=(?<speed>(.*?)) SIZE=(?<size>(.*?)) ",
  RegexOptions::ExplicitCapture);
m = theregex.Match (yourinputstring);
if (m.Success)
{
  if (m.Groups["speed"].Success)
    speed = m.Groups["speed"].Value;
  if (m.Groups["size"].Success)
    size = m.Groups["size"].Value;
}
else
  throw new FormatException ("Input options not recognized");

構文エラーで申し訳ありません。現在、テストするコンパイラがありません。

于 2008-09-19T02:45:06.823 に答える
2

私があなたの質問を正しく理解できれば、あなたは捕獲グループを探しています。私は .net API に詳しくありませんが、Java では次のようになります。

Pattern pattern = Pattern.compile("command SPEED=(\d+) SIZE=(\d+)");
Matcher matcher = pattern.matcher(inputStr);
if (matcher.find()) {
  speed = matcher.group(1);
  size = matcher.group(2);
}

上記の正規表現パターンには、2 組の括弧で指定された 2 つのキャプチャ グループがあります。Java ではこれらは番号で参照する必要がありますが、他の一部の言語では名前で参照できます。

于 2008-09-19T02:57:37.760 に答える
0

すべての変数をクラスに入れると、リフレクションを使用してそのフィールドを反復処理し、それらの名前と値を取得して文字列にプラグインできます。

InputArgs という名前のクラスのインスタンスがあるとします。

foreach (FieldInfo f in typeof(InputArgs).GetFields()) {
    string = Regex.replace("\\[" + f.Name + "\\]",
        f.GetValue(InputArgs).ToString());
}
于 2008-09-19T02:20:47.850 に答える