2009-03-08 18 views
0

私はC#を使用しています。アルファベットの文字とスペースのみを使用しようとしています。現時点では私の式は次のとおりです。シンプルな正規表現パターン

string regex = "^[A-Za-z\s]{1,40}$"; 

私のIDEは、\ sは、私が何をしないのです「認識できないエスケープシーケンス」

であることを述べていますか?

答えて

6

"\"は、C#エスケープ文字と正規表現のエスケープ文字です。試してください:

string regex = @"^[A-Za-z\s]{1,40}$"; 
2

あなたはverbatim string literalにそれを回すためにあなたの文字列の前に@を配置する必要があります。今

string regex = @"^[A-Za-z\s]{1,40}$"; 

\をあなたの正規表現では、次のようsを脱出しようとしていると解釈されていますコンパイラは理解できません。

また、あなただけの別の1でのバックスラッシュをエスケープすることができます

string regex = "^[A-Za-z\\s]{1,40}$"; 

が、一般的には、第二の最初のアプローチを好みます。

1

あなたの説明はあなたの正規表現ではありません。あなたは言葉の間に最大1スペースを言う。これを行うには、文字リストから "\ s"を移動する必要があります。現在使用しているパターンでは、「1から40までの任意の英数字またはスペース」を使用して複数の連続するスペースを使用できます。これは、「1回以上は、オプションの空白が続く任意の英数字、これ全部1回以上」を意味

string regex = @"^(?:[A-Za-z]+\s?)+$"; 

:あなたはもっと、次のようなものが必要でしょう。最初の式のサイズがわからないときは、文字列全体を40文字に制限する方法はわかりません。たぶん、これは "後ろに見える"表現で達成できますが、わかりません。あなたは2つのステップでそれをしなければならないかもしれません。

+0

良い点。私はそのグループの内部に何か問題があったと思った。 – Joel