0

テキストを解析し、すべての角括弧の間が a-であり、その前後に-少なくとも 1 文字ある必要があるかどうかを確認する必要があります。次のコードを試しましたが、うまくいきません。一致数が多すぎます。

Regex regex = new Regex(@"[\.*-.*]");
MatchCollection matches = regex.Matches(textBox.Text);

サンプルテキスト:

Node
  (Entity [1-5])
4

3 に答える 3

3

私も答えを提供するかもしれないと考えました...私のポイントを繰り返すには(変更を加えて):

  1. *0 回以上の出現に一致します。あなたは+おそらくしたいです。
  2. 角括弧は特殊文字であり、エスケープする必要があります。これらは文字セットを定義するために使用されます。
  3. おそらく、「任意の文字」マッチングから[およびを除外したいと思うでしょう。]

これをすべてまとめると、次のようにするとうまくいくはずです。

Regex regex = new Regex(@"\[[^-[\]]+-[^[\]]+\]");

少し面倒ですが、重要なことは[^[\]]、角かっこ以外の任意の文字を意味することです。[^-[\]]を意味しますが、許可しないことも意味し-ます。これは最適化であり、必須ではありませんが、正規表現エンジンが一致を計算するときに実行する必要がある作業を軽減するだけです。この最適化を指摘してくれた ridgerunner に感謝します。

于 2012-11-08T16:01:26.847 に答える
1

角括弧は正規表現で特別な意味を持ち、エスケープする必要があります。さらに、少なくとも 1文字が必要な場合+は、ではなく*.

Regex regex = new Regex(@"\[.+-.+\]");
MatchCollection matches = regex.Matches(textBox.Text);
于 2012-11-08T15:56:01.310 に答える
0
 string txt = "(Entity [1-5])";
 Regex reg = new Regex(@"\[.+\-.+\]");

#の場合:

 string txt = "(Entity [1-5])";
 Regex reg = new Regex(@"\[\d+\-\d+\]");
于 2012-11-08T16:04:41.357 に答える