我需要一個正則表達式,可用於查找逗號分隔列表中的 Nth條目。我可以使用什麼正則表達式在逗號分隔列表中查找Nᵗʰ條目?
例如,假設這個名單看起來是這樣的:
abc,def,4322,[email protected],3321,alpha-beta,43
...我想找到7個進入(alpha-beta
)的值。
我需要一個正則表達式,可用於查找逗號分隔列表中的 Nth條目。我可以使用什麼正則表達式在逗號分隔列表中查找Nᵗʰ條目?
例如,假設這個名單看起來是這樣的:
abc,def,4322,[email protected],3321,alpha-beta,43
...我想找到7個進入(alpha-beta
)的值。
我的第一個想法不是使用正則表達式,而是使用將逗號分割爲逗號中數組的字符串,但是因爲您要求使用正則表達式。
大多數正則表達式允許您指定最小或最大匹配,所以像這樣的東西可能會起作用。
/(?:[^\,]*\,){6}([^,]*)/
這是爲了匹配不是一個逗號,後跟一個逗號正好六次(?:[^,]*,){6}
任意數量的字符 - 的?:
說,不捕捉 - 然後匹配和捕捉任何數目的字符是不是逗號([^,]+)
。你想使用第一個捕獲組。
讓我知道你是否需要更多信息。
編輯:我編輯上述不捕獲字符串的第一部分。這個正則表達式在C#和Ruby中工作。
我相信這也適用於Java,儘管您可能需要使用group屬性,並且它將是組數組中的第二個元素。 – gymbrall 2012-03-15 16:39:46
您可以使用類似:
([^,]*,){$m}([^,]*),
作爲一個起點。 (用(n-1)的值替換$ m。)內容將在捕獲組2中。這不處理像n大小的列表,但這只是對您的情況進行適當修改的問題。
我不認爲這有效。 – 2012-03-15 16:08:55
@list = split /,/ => $string;
$it = $list[6];
或只是
$it = (split /,/ => $string)[6];
節拍寫在它的每一次{6}
的模式。
你必須使用正則表達式嗎?怎麼樣'str.split(「,」)[N - 1]' – Amarghosh 2012-03-15 16:01:02
@Amarghosh他可能不會使用Python – CoffeeRain 2012-03-15 16:03:53
你不想用直的正則表達式來做。你想分割它,或者更好的是,使用CSV解析模塊,然後從結果列表中取出你需要的元素。 – tchrist 2012-03-15 16:05:47