7

正規表現が正確にどのように機能するかを理解するのにまだ苦労しています。

ユーザー名を取得していますが、次の形式になっています。

firstname.lastname

両方の名前に特殊な国際文字が含まれている可能性があり、' または - が含まれている可能性がありますが、例外をスローできるように大文字が含まれているかどうかを検出する必要があります。

この表現を使っています

[^A-Z].[^A-Z]

これは機能するはずですが、なぜ機能しないのかわかりません。

誰かが説明してくれることを願っています。

ありがとう!

4

5 に答える 5

11

[^A-Z]単純に、大文字の A から大文字の Z まで以外の任意の文字を意味します。

.\.これはリテラル文字を意味するため、使用する必要がある任意の文字を意味します.

文字グループは[]逆で[^]、次に一致させたい文字を入れます。

ただし、正規表現は、大文字ではない単一の文字、次に任意の文字、次に大文字ではない別の単一の文字のみに一致するように見えます

次のものを使用します。

[^A-Z]+\.[^A-Z]+

+in regex は、前に述べた 1 から無限回に一致することを意味します。

このテキストのみを使用し、他のテキストを使用しない場合は、行頭タグと行末タグを含めて、言及したようにフォーマットされたものを含む長い文字列と一致しないようにする必要があります。

ただし、正規表現はスペースとタブにも一致します。

したがって、次を使用します。

^[^A-Z\s]+\.[^A-Z\s]+$

小文字のみで動作する正規表現デモ

ユーザー名に大文字が含まれているため、正規表現デモが失敗する

于 2013-07-25T14:51:10.030 に答える
4

正規表現を使用する代わりに、このメソッドを使用して大文字をチェックできます。

public static bool checkStringForUpperCase(string s) 
{
    for (int i = 0; i < s.Length; i++)
    {
        if (char.IsUpper(s[i]))
            return false;
    }
    return true;
}
于 2013-07-25T14:52:14.800 に答える
3

大文字がないことを確認したい場合は、中間のドット int は必要ありません。正規表現記号を[^A-Z] 使用startして、これが複数の記号になる可能性があることを署名する必要があります。end私の記憶が正しければ、次のようなものになるはずです^[^A-Z]*$

于 2013-07-25T14:50:10.380 に答える
0

大文字が含まれているかどうかのみを確認したい場合。これを試して。

  string test = @"Test";
  string test2 = "test";
  bool result = test.Any(x=>char.IsUpper(x));  //true
  result = test2.Any(x => char.IsUpper(x));//false
于 2013-07-25T14:53:37.253 に答える