2017-05-12 47 views
5

İlk karakterin ve sonraki üç basamaktan birden fazla eşleşme elde etmek için bir regexp yazmak istiyorum. Bazı geçerli örnekler: A123, V322, R333. ORegExp metin içinde eşleşmeleri çarpın

[a-aA-Z](1)\d3 

gibi bir şey denemek ama bana sadece ilk maçı alır! enter image description here Birden çok sonuç almak için bu regexp'in nasıl yazılacağını bana gösterebilir misiniz? Çok teşekkür ederim ve iyi günler!

+0

Sizin karakter sınıfı '[a-aA-Z]' Yalnızca küçük 'a' ve büyük harf' A-Z' eşleşir. Ne için gideceğinizden emin değilim. – quackenator

+0

Ne demek _first character_? İlk önce ne var? – sln

+0

'[[: alpha:]] \ d {3}' [Test] (https://regex101.com/r/K6rgA6/1) –

cevap

4

o eşleştiği için düzenli ifade çalışmaz:

  • [a-aA-Z] - o zaman bir ASCII harf,
  • (1) - Bir 1 haneli (ve bir yakalama içine koyar)
  • \d - Herhangi 1 rakamı
  • 3 - a 3 basamak.

Yani, Y193, E103 bile Y ve Eilk harf olmayan uzun cümleler, içinde vb eşleşir.

Bir kelime sınırı kullanmak ve

\b[a-aA-Z][0-9]{3} 

NOT olarak Kalıbınızı düzeltmek gerekir: \b[a-aA-Z][0-9]{3}\b: Eğer bütün bir kelime olarak eşleşmesi sonunda \b eklemeniz gerekiyorsa.

regex demo'a bakın.

Detaylar:

  • \b - önde gelen kelime sınır
  • [a-aA-Z] - bir ASCII harf
  • [0-9]{3} - 3 basamak.

C# kodu:

var results = Regex.Matches(s, @"\b[a-aA-Z][0-9]{3}") 
     .Cast<Match>() 
     .Select(m => m.Value) 
     .ToList(); 
+0

Eşleşme ve karşılaşmalarla ilgili olasılıkla karşılaşacağımızdan şüpheliyim. –

+1

Sorun, yalnızca OP'nin regex101.com adresindeki bir düzenli ifadeyi nasıl test edeceğini anlamamasıdır. Ancak, .NET regex sözdizimini desteklemeyen çevrimiçi bir Web sınayıcısında .NET regex'inin test edilmesinin pek bir anlamı yoktur. Her neyse, yardımcı olması gereken kodu da öneririm. –

+1

Harika cevap @ WiktorStribiżew Çok teşekkür ederim! –