2009-03-08 24 views
0

C# kullanıyorum ve yalnızca alfabetik harflere ve boşluklara izin vermeye çalışıyorum. Şu anda benim ifadesidir:Basit normal ifade desen

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

benim IDE \ s ı eksik ben bir "Tanınmayan kaçış dizisi"

olduğunu söylüyor?

cevap

6

"\", bir C# çıkış karakterinin yanı sıra normal ifade karakteridir. Deneyin:

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

Bir verbatim string literal çevirmek için dize önünde bir @ koymak gerekir: Şu anda

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

, \ senin regex aşağıdaki s kaçmaya çalışırken olarak yorumlandığı derleyici anlamıyor.

Alternatif olarak, sadece bir başkasıyla ters eğik çizgi kaçış:

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

ama genelde

, ikinci ilk yaklaşımı tercih.

1

Ek bir not, normal ifadeniz tanımladığınız şeyi yapmaz. Kelimeler arasında en fazla 1 boşluk diyorsun. Bunu yapmak için, "\ s" harfini karakter listesinden çıkarmanız gerekir. Şu anda kullanmakta olduğunuz desen "art arda birden fazla alan için izin veren" 1 ila 40 kat arasında bir alfanümerik veya alan "sağlar.

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

"herhangi bir alfanümerik isteğe bağlı boşluk ve ardından 1 veya daha fazla kez, bütün bunları bir ya da daha fazla kez": Aşağıdaki gibi daha fazla bir şey gerekir. Önceden ilk ifadenin boyutunu bilmiyorsanız, tüm dizeyi 40 karakterle nasıl sınırlandıracağımı bilmiyorum. Belki bu bir "arkana bak" ifadesiyle başarılabilir, ama emin değilim. Bunu iki adımda yapmanız gerekebilir.

+0

İyi nokta. Grubun içinde yanlış bir şey olduğunu düşündüm. – Joel