2012-03-15 14 views
6

मुझे एक नियमित अभिव्यक्ति की आवश्यकता है जिसका उपयोग एनवें अल्पविराम से अलग सूची में प्रविष्टि को खोजने के लिए किया जा सकता है।अल्पविराम से अलग सूची में एनᵗʰ प्रविष्टि को खोजने के लिए मैं किस नियमित अभिव्यक्ति का उपयोग कर सकता हूं?

उदाहरण के लिए, इस सूची इस प्रकार है:

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

... और मुझे 7 वें प्रविष्टि (alpha-beta) का मान ज्ञात करना चाहता था।

+4

क्या आप रेगेक्स का उपयोग करना चाहिए? 'Str.split (", ") [N-1]' – Amarghosh

+2

@Amarghosh के बारे में वह शायद पाइथन – CoffeeRain

+0

का उपयोग नहीं कर रहा है, आप इसे सीधे रेगेक्स के साथ नहीं करना चाहते हैं। आप इसे विभाजित करना चाहते हैं, या बेहतर अभी तक, एक CSV-पार्सिंग मॉड्यूल का उपयोग करें, और फिर परिणामी सूची से आवश्यक तत्व को खींचें। – tchrist

उत्तर

7

मेरा पहला विचार नियमित अभिव्यक्ति का उपयोग नहीं करना होगा, लेकिन कुछ ऐसा करने के लिए जो स्ट्रिंग को कोमा पर सरणी में विभाजित करता है, लेकिन चूंकि आपने रेगेक्स के लिए कहा था।

अधिकतर रेगेक्स आपको न्यूनतम या अधिकतम मिलान निर्दिष्ट करने की अनुमति देते हैं, इसलिए ऐसा कुछ संभवतः काम करेगा।

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

यह है कि एक अल्पविराम छह बार वास्तव में एक अल्पविराम के बाद (?:[^,]*,){6} नहीं हैं चरित्र के किसी भी संख्या से मेल करने के लिए है - ?: का कहना है के लिए नहीं पर कब्जा - और फिर से मेल खाते हैं और वर्णों की संख्या पर कब्जा करने की है कि एक अल्पविराम ([^,]+) नहीं हैं। आप पहले कैप्चर समूह का उपयोग करना चाहते हैं।

मुझे बताएं कि आपको और जानकारी चाहिए या नहीं।

संपादित करें: मैंने उपरोक्त संपादित किया है ताकि स्ट्रिंग के पहले भाग को कैप्चर न किया जा सके। यह regex सी # और रूबी में काम करता है।

+0

मेरा मानना ​​है कि यह जावा में भी काम करता है, हालांकि आपको समूह संपत्ति का उपयोग करने की आवश्यकता हो सकती है और यह समूह सरणी में दूसरा तत्व होगा। – gymbrall

0

आप की तरह कुछ इस्तेमाल कर सकते हैं:

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

एक प्रारंभिक बिंदु के रूप में। ($ M को (n-1) के मान के साथ बदलें।) सामग्री कैप्चर समूह 2 में होगी। यह आकार n की सूचियों जैसी चीज़ों को संभाल नहीं पाती है, लेकिन यह केवल आपकी स्थिति के लिए उपयुक्त संशोधन करने का विषय है।

+0

मुझे नहीं लगता कि यह काम करता है। –

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

या सिर्फ

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

बीट्स उस में एक {6} हर बार के साथ एक पद्धति लेखन।

संबंधित मुद्दे

 संबंधित मुद्दे