4

自分で正規表現を構築することはできませんでしたが、今ではそれを必要とする単純なアプリケーションができました。一致する単純な正規表現を作成するにはどうすればよいですか:

  1. 固定文字列
  2. 空白なし/任意の空白
  3. 「=」文字
  4. 空白なし/任意の空白
  5. 「(」文字

現在、単語全体を一致させるために次のコードを使用していますが、機能がかなり制限されていることがわかります。

Regex.Matches(data, @"\b" + Regex.Escape(columnID + "=(") + @"\b");
Regex.Matches(data, @"\b" + Regex.Escape(columnID + "= (") + @"\b");
Regex.Matches(data, @"\b" + Regex.Escape(columnID + " =(") + @"\b");
Regex.Matches(data, @"\b" + Regex.Escape(columnID + " = (") + @"\b");
4

4 に答える 4

3
于 2012-06-07T19:09:08.013 に答える
2

これは、要件を満たす正規表現です。固定文字列を前に付けます。

Regex.Matches(data, Regex.Escape(columnID) + @"\s*=\s*\(");
于 2012-06-07T19:14:49.837 に答える
1

「任意の空白」と言いましたが、正規表現の表現に基づいて、オプションの単一の空白を探しているようです。この場合は、疑問符を使用してください。

Regex.Matches(data, Regex.Escape(columnID) + @"\s?=\s?\(");

正規表現の疑問符は、前の文字(または括弧を使用する場合はグループ)がオプションであることを意味します。

存在する場合と存在しない場合がある単一の空白を探している場合は、+または*を使用しないでください。*は次の文字が満たされるまで0以上の空白に一致し、+は1つ以上の空白に一致するためです。次の文字が満たされるまでスペースを入れます。

于 2012-06-07T19:47:21.230 に答える
1

正規表現では、「*」は前の式の「0 個以上」と一致し、「+」は 1 個以上と一致します。"[]" は、括弧内の任意の文字に一致します。さらに、「[^]」を使用して「これらの文字以外」に一致させることができます。

あなたの例では、次の正規表現パターンが機能するはずです(固定文字列が何であれ、「fixedString」に置き換えてください): "fixedString\s*=\s*\("

正規表現についてさらに学習するために、フィールドが任意の文字列である場合は、次を使用できます。 "(\b[a-zA-Z]+\b)\s*=\s*\("

それを分解するには:

"(\b[a-zA-Z0-9]+\b)"は、単語境界、少なくとも 1 つの英数字、次に単語境界 (つまり、基本的には英数字だけで構成される単語) に一致します。

"\s*"「No whitespace / any whitespace」に一致します

"="等号に一致します

"\s*"上記を参照

"\("「(」文字に一致します (「(」は正規表現の複雑な式の開始を意味するため、これはエスケープする必要があります。)

正規表現パターンの作成を練習したい場合は、 http://www.regextester.com/を使用することをお勧めします。

更新:\w元の投稿で誤って空白を 入れてしまいました。\w単語の文字 (英数字と "_") を表します。正しい正規表現エスケープ文字に置き換えられました\s

于 2012-06-07T19:16:37.260 に答える