2012-03-15 28 views
6

Virgülle ayrılmış bir listede bulunan Nth girdisini bulmak için kullanılabilecek düzenli bir ifadeye ihtiyacım var.Nᵗʰ girişini virgülle ayrılmış bir listede bulmak için hangi normal ifadeyi kullanabilirim?

abc,def,4322,[email protected],3321,alpha-beta,43 

... ve 7 inci girişi (alpha-beta) değerini bulmak istedim:

Örneğin, bu liste aşağıdaki gibi göründüğünü. Başlangıç ​​noktası olarak

([^,]*,){$m}([^,]*), 

:

+4

Regex kullanıyor musunuz? Bir str.split (",") [N - 1] ' – Amarghosh

+2

@Amarghosh hakkında Bu Python – CoffeeRain

+0

kullanıyor olmayabilir Düz bir normal ifade ile yapmak istemezsiniz. Bölmek isterseniz veya daha iyisi, bir CSV ayırma modülü kullanın ve sonra ortaya çıkan listeden ihtiyacınız olan öğeyi dışarı çekin. – tchrist

cevap

7

İlk düşüncem normal bir ifade kullanmak değil, dizgiyi virgül üzerinde bir diziye bölen bir şey kullanmak değil, bir düzenli ifadeyi istediğinden beri.

Çoğu regex, bir minimum veya maksimum eşleşme belirtmenize izin verir, bu nedenle böyle bir şey muhtemelen işe yarayacaktır.

/(?:[^\,]*\,){6}([^,]*)/

Bu

altı kat tam virgülle (?:[^,]*,){6} ardından virgül değildir karakterin herhangi bir sayıda maç için tasarlanmıştır - ?: yakalayamaz diyor - herhangi bir karakter sayısıyla aynı ve yakalamak için daha sonra o bir virgül değil ([^,]+). İlk çekim grubunu kullanmak istiyorsunuz.

Daha fazla bilgiye ihtiyacınız varsa bildirin.

DÜZENLEME: Dizenin ilk bölümünü yakalamak için yukarıdakileri düzenledim. Bu regex C# ve Ruby'de çalışır.

+0

Bunun da Java'da da çalıştığına inanıyorum, ancak grup özelliğini kullanmanız gerekebilir ve grup dizisindeki ikinci öğe olacaktır. – gymbrall

0

Sen gibi bir şey kullanabilirsiniz. ($ M'yi (n-1) değeriyle değiştirin.) İçerik, yakalama grubu 2'de olacaktır. Bu, n boyut listeleri gibi şeyleri işlemez, ancak bu durum, durumunuz için uygun değişiklikleri yapma konusudur.

+0

Bunun bence işe yaramaz. –

-2
@list = split /,/ => $string; 
$it = $list[6]; 

veya içinde bir {6} her zaman sahip modelinin yazılması sadece

$it = (split /,/ => $string)[6]; 

Beats.