2012-03-15 7 views
6

Potrzebuję wyrażenie regularnego, które może być użyte do znalezienia wpisu na liście rozdzielanej przecinkami.Jakiego wyrażenia regularnego można użyć do znalezienia wpisu Nᵗʰ na liście rozdzielanej przecinkami?

Załóżmy, że lista ta wygląda następująco:

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

... i chciałem znaleźć wartość 7 th wpisu (alpha-beta).

+4

Musisz użyć wyrażenia regularnego? Co powiesz na 'str.split (", ") [N - 1]' – Amarghosh

+2

@Amarghosh Może on nie używać Pythona – CoffeeRain

+0

Nie chcesz tego robić z prostym wyraże- niem. Chcesz go podzielić lub jeszcze lepiej użyć modułu do analizy CSV, a następnie wyciągnąć potrzebny element z wynikowej listy. – tchrist

Odpowiedz

7

Moja pierwsza myśl nie polega na użyciu wyrażenia regularnego, ale na użyciu czegoś, co dzieli ciąg znaków na tablicę na przecinku, ale od pytania o wyrażenie regularne.

większość wyrażeń regularnych pozwala ci określić minimalne lub maksymalne dopasowanie, więc coś podobnego prawdopodobnie by działało.

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

ten przeznaczony jest, aby dopasować dowolną liczbę znaków, które nie są przecinek następnie przecinek sześć razy dokładnie (?:[^,]*,){6} - w ?: mówi nie uchwycić - a następnie dopasować i zdobyć dowolną liczbę znaków, które nie są przecinkami ([^,]+). Chcesz użyć pierwszej grupy przechwytywania.

Daj mi znać, jeśli potrzebujesz więcej informacji.

EDYCJA: Edytowałem powyższe, aby nie uchwycić pierwszej części napisu. To wyrażenie działa w C# i Ruby.

+0

Wierzę, że to również działa w Javie, choć może być konieczne użycie właściwości grupy i byłby to drugi element w tablicy grup. – gymbrall

0

Można użyć coś takiego:

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

Jako punkt wyjścia. (Zamień $ m na wartość (n-1).) Zawartość będzie w grupie przechwytywania 2. Nie obsługuje to rzeczy takich jak listy o rozmiarze n, ale to tylko kwestia dokonania odpowiednich modyfikacji dla twojej sytuacji.

+0

Nie sądzę, żeby to działało. –

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

czy tylko

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

Beats pisanie wzorów o {6} w nim za każdym razem.

Powiązane problemy