2012-03-15 25 views
6

我需要一個正則表達式,可用於查找逗號分隔列表中的 Nth條目。我可以使用什麼正則表達式在逗號分隔列表中查找Nᵗʰ條目?

例如,假設這個名單看起來是這樣的:

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

...我想找到7個進入alpha-beta)的值。

+4

你必須使用正則表達式嗎?怎麼樣'str.split(「,」)[N - 1]' – Amarghosh 2012-03-15 16:01:02

+2

@Amarghosh他可能不會使用Python – CoffeeRain 2012-03-15 16:03:53

+0

你不想用直的正則表達式來做。你想分割它,或者更好的是,使用CSV解析模塊,然後從結果列表中取出你需要的元素。 – tchrist 2012-03-15 16:05:47

回答

7

我的第一個想法不是使用正則表達式,而是使用將逗號分割爲逗號中數組的字符串,但是因爲您要求使用正則表達式。

大多數正則表達式允許您指定最小或最大匹配,所以像這樣的東西可能會起作用。

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

這是爲了匹配不是一個逗號,後跟一個逗號正好六次(?:[^,]*,){6}任意數量的字符 - 的?:說,不捕捉 - 然後匹配和捕捉任何數目的字符是不是逗號([^,]+)。你想使用第一個捕獲組。

讓我知道你是否需要更多信息。

編輯:我編輯上述不捕獲字符串的第一部分。這個正則表達式在C#和Ruby中工作。

+0

我相信這也適用於Java,儘管您可能需要使用group屬性,並且它將是組數組中的第二個元素。 – gymbrall 2012-03-15 16:39:46

0

您可以使用類似:

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

作爲一個起點。 (用(n-1)的值替換$ m。)內容將在捕獲組2中。這不處理像n大小的列表,但這只是對您的情況進行適當修改的問題。

+0

我不認爲這有效。 – 2012-03-15 16:08:55

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

或只是

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

節拍寫在它的每一次{6}的模式。

相關問題