0

コードに次の行があります。

Match match = Regex.Match(actualValue, regexValue, RegexOptions.None);

簡単な質問があります。次の行で成功の意味を確認するときの理由:

if(match.Success)

一致は次の値で成功します。

実際の値 ="G:1"

正規表現値 ="A*"

実際のものは少なくとも私には合わないようですので、おそらく何かを見逃しています...

私が達成したいのは、実際の値と正規表現を受け取って、実際の値が正規表現に適合するかどうかを確認することです。

編集:別の質問。* を「任意の文字」ワイルドカードとして扱う方法はありますか? A* が A と見なされ、その後は任意の文字が可能である可能性はありますか?

4

4 に答える 4

3

コード自体は正しいです。あなたの正規表現はそうではありません。

他の回答に関するコメントに基づいて、Aで始まる任意の文字列に一致する正規表現を求めており、「*」は「任意の文字」を意味すると想定しています。' *' は実際には「前の文字に 0 回以上一致する」ことを意味するため、指定した正規表現は「文字列の先頭に一致し、その後に 0 個以上の 'A' 文字が続く」ことを意味し、これは絶対に何にでも一致します。

文字列全体に一致するが「A」で始まる場合にのみ一致する正規表現を探している場合、求める正規表現は^A.*. 正規表現の ' .' 文字は、「任意の文字に一致する」ことを意味します。したがって、この正規表現は、「文字列の先頭に一致し、その後に 'A' が続き、その後に 0 個以上の他の文字が続く」ことを意味し、'A' で始まる文字列全体に一致します。

ただし、すでに文字列全体を取得しいるため、これは少し不要です。本当にやりたいことは、「文字列は 'A' で始まりますか?」という質問に対する答えを得ることだけです。これを実現する正規表現は単に '^A' です。一致する場合、文字列は「A」で始まります。

もちろん、とにかくこれを確認するために正規表現は必要ないことを指摘しておく必要があります。本当にやりたいことがこれだけの場合 (単純な例をまとめただけで、実際のシナリオはもっと複雑である可能性があります)、StartsWith メソッドを使用してみませんか?:

bool match = actualValue.StartsWith("A");
于 2012-08-02T08:57:20.983 に答える
1

正規表現が一致するのは、「'A' の0回以上の出現をA*探す」ことを意味するためです。どんな文字列にもマッチします。

任意の数の 'A' を探すつもりでしたが、少なくとも 1 つを探す場合は、A+代わりに試してください。

于 2012-08-02T08:39:22.997 に答える
1

コメントを見ると、A で始まる多くの文字列を一致させようとしているように見えます。それらが空白で区切られている場合は、次を使用してすべてを見つけることができます。

bool matched = Regex.IsMatch(actualValue, @"\bA\w+");

これは次のように一致します: "Atest flkjs Apple Ascii cAse".

一致する文字列が 1 つしかなく、それが A で始まり、スペースがない場合:

bool matched = Regex.IsMatch(actualValue, @"^A\w+$");

これは "Apple" に一致しますが、2 番目の文字列にスペースがあるため、"Apple and orange" には一致しません。

Chris が指摘したように、* は正規表現検索で意図したワイルドカードではありません。regex-infoで、正規表現を使い始めるための情報を見つけることができます。

于 2012-08-02T09:17:04.413 に答える
0

正規表現は、コンストラクターで正規表現を取ります。あなたの場合の例は次のとおりです。

if(new Regex("A*").IsMatch(actualValue)
   //Do something

regexpattern に自信がない場合は、ここで試してみてください

于 2012-08-02T08:40:43.320 に答える