2012-03-15 15 views
6

Tôi cần cụm từ thông dụng có thể được sử dụng để tìm mục nhập Nthứ trong danh sách được phân cách bằng dấu phẩy.Tôi có thể sử dụng cụm từ thông dụng nào để tìm mục nhập Nᵗʰ trong danh sách được phân cách bằng dấu phẩy?

Ví dụ, nói danh sách này trông như thế này:

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

... và tôi muốn tìm giá trị của 7 thứ entry (alpha-beta).

+4

Bạn có phải sử dụng regex không? Làm thế nào về một 'str.split (", ") [N - 1]' – Amarghosh

+2

@Amarghosh Ông có thể không được sử dụng Python – CoffeeRain

+0

Bạn không muốn làm điều đó với một regex thẳng. Bạn muốn chia nhỏ nó, hoặc tốt hơn, hãy sử dụng một mô-đun phân tích cú pháp CSV, và sau đó rút ra phần tử bạn cần từ danh sách kết quả. – tchrist

Trả lời

7

Suy nghĩ đầu tiên của tôi sẽ không sử dụng cụm từ thông dụng, nhưng sử dụng thứ gì đó chia chuỗi thành một mảng trên dấu phẩy, nhưng vì bạn đã yêu cầu regex.

hầu hết các regex cho phép bạn chỉ định một kết quả tối thiểu hoặc tối đa, vì vậy một cái gì đó như thế này có thể sẽ hoạt động.

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

này được thiết kế để phù hợp với bất kỳ số lượng nhân vật mà không phải là một dấu phẩy theo sau bởi một dấu phẩy sáu lần chính xác (?:[^,]*,){6} - các ?: nói đến không nắm bắt - và sau đó để phù hợp và nắm bắt được bất kỳ số lượng ký tự không phải là dấu phẩy ([^,]+). Bạn muốn sử dụng nhóm chụp đầu tiên.

Hãy cho tôi biết nếu bạn cần thêm thông tin.

EDIT: Tôi đã chỉnh sửa ở trên để không nắm bắt phần đầu tiên của chuỗi. Regex này hoạt động trong C# và Ruby.

+0

Tôi tin rằng điều này cũng hoạt động trong Java, mặc dù bạn có thể cần phải sử dụng thuộc tính nhóm và nó sẽ là phần tử thứ hai trong mảng nhóm. – gymbrall

0

Bạn có thể sử dụng một cái gì đó như:

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

Là một điểm khởi đầu. (Thay thế $ m với giá trị của (n-1).) Nội dung sẽ nằm trong nhóm chụp 2. Điều này không xử lý những thứ như danh sách kích thước n, nhưng đó chỉ là vấn đề sửa đổi thích hợp cho tình huống của bạn.

+0

Tôi không nghĩ rằng điều này hoạt động tho. –

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

hoặc chỉ

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

Beats viết một mô hình với một {6} trong nó mỗi lần.