2012-03-15 13 views
6

Ho bisogno di un'espressione regolare che può essere utilizzata per trovare la Nth voce in un elenco separato da virgole.Quale espressione regolare posso utilizzare per trovare la voce Nᵗʰ in un elenco separato da virgole?

Ad esempio, dire questa lista si presenta così:

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

... e volevo trovare il valore del 7 ° ingresso (alpha-beta).

+4

Devi usare espressioni regolari? Che ne dici di un 'str.split (", ") [N - 1]' – Amarghosh

+2

@Amarghosh Potrebbe non usare Python – CoffeeRain

+0

Non vuoi farlo con un'espressione regolare. Se vuoi dividerlo, o meglio ancora, usa un modulo di analisi CSV, quindi estrai l'elemento necessario dall'elenco risultante. – tchrist

risposta

7

Il mio primo pensiero non sarebbe di usare un'espressione regolare, ma di usare qualcosa che divide la stringa in una matrice sulla virgola, ma poiché hai chiesto una espressione regolare.

la maggior parte delle espressioni regolari consente di specificare una corrispondenza minima o massima, quindi qualcosa del genere potrebbe funzionare.

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

Questo ha lo scopo di adattarsi a qualsiasi numero di caratteri che non sono una virgola seguito da una virgola sei volte esattamente (?:[^,]*,){6} - il ?: dice di non catturare - e poi da abbinare e catturare qualsiasi numero di caratteri che non sono una virgola ([^,]+). Vuoi usare il primo gruppo di cattura.

Fatemi sapere se avete bisogno di maggiori informazioni.

MODIFICA: ho modificato quanto sopra per non acquisire la prima parte della stringa. Questa regex funziona in C# e Ruby.

+0

Credo che funzioni anche in Java, anche se potrebbe essere necessario utilizzare la proprietà del gruppo e sarebbe il secondo elemento nell'array del gruppo. – gymbrall

0

Si potrebbe usare qualcosa come:

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

Come punto di partenza. (Sostituisci $ m con il valore di (n-1).) Il contenuto sarebbe nel gruppo di cattura 2. Questo non gestisce cose come gli elenchi di dimensione n, ma si tratta solo di apportare le modifiche appropriate alla tua situazione.

+0

Non penso che funzioni così. –

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

o solo

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

Beats la scrittura di un modello con un {6} in esso ogni volta.

Problemi correlati