2012-09-25 9 views
5

मैं फेसबुक के लिए हैशटैग स्क्रैपर लिख रहा हूं, और हैशटैग प्राप्त करने के लिए आने वाले प्रत्येक रेगेक्स में विराम चिह्न और अल्फान्यूमेरिक वर्ण शामिल हैं। यहां एक उदाहरण दिया गया है जो मैं चाहूंगा:रेगेक्स सभी अल्फान्यूमेरिक हैशटैग से मेल खाने के लिए, कोई प्रतीक

हैलो # वर्ल्ड! मैं #fac_book स्क्रैपर # m4king कर रहा हूं और एक अच्छा नियमित # एक्सप्रेशन पसंद करूंगा।

मैं इसे मैच के लिए world, m4king, fac और expression (ध्यान दें कि मैं इसे काट करना चाहते हैं तो यह विराम चिह्न तक पहुँच जाता है, रिक्त स्थानों सहित) करना चाहते हैं। यह अच्छा होगा अगर इसमें हैश प्रतीक शामिल नहीं था, लेकिन यह बहुत महत्वपूर्ण नहीं है।

बस इसे महत्वपूर्ण बनाएं, मैं संभवतः एक से अधिक टैग को पकड़ने के लिए रूबी की स्ट्रिंग स्कैन विधि का उपयोग करूँगा।

धन्यवाद अग्रिम धन्यवाद!

उत्तर

5

इस तरह के एक रेगेक्स: #([A-Za-z0-9]+) आपको जो चाहिए उसे मेल खाना चाहिए और उसे कैप्चर समूह में रखना चाहिए। फिर आप इस समूह को बाद में एक्सेस कर सकते हैं। शायद this नियमित अभिव्यक्तियों (रूबी संदर्भ से) पर कुछ प्रकाश डालने में मदद करेगा।

ऊपर दिए गए रेगेक्स को # टैग मिलने पर मिलान करना शुरू हो जाएगा और किसी भी निम्न अक्षरों या संख्याओं को कैप्चर समूह में फेंक देगा। एक बार यह कुछ भी मिलता है जो एक अक्षर या अंक नहीं है, यह मिलान को रोक देगा। अंत में आप एक समूह के साथ समाप्त हो जाएगा जिसमें आप हैं।

+0

धन्यवाद:

str = 'Hello #world! I am #m4king a #fac_book scraper and would like a nice regular #expression' str.scan(/#[[:alnum:]_]+/) 

यहाँ Rubular पर एक दृश्य है! मैं निश्चित रूप से इसमें पढ़ूंगा! –

6
str = 'Hello #world! I am #m4king a #fac_book scraper and would like a nice regular #expression' 
str.scan(/#([A-Za-z0-9]+)/).flatten #=> ["world", "m4king", "fac", "expression"] 

# फ़्लैटन पर कॉल की आवश्यकता है क्योंकि प्रत्येक कैप्चर समूह अपनी सरणी के अंदर होगा।

str.scan /(?<=#)[[:alnum:]]+/ #=> ["world", "m4king", "fac", "expression"] 
+0

धन्यवाद! दूसरे संस्करण के पहले संस्करण का उपयोग करने के लिए कोई फायदा होगा? ऐसा लगता है कि दूसरा दूसरा बहुत आसान है (और मैं पहले फ़्लैट करने की अपेक्षा थोड़ा अधिक प्रदर्शन करता हूं) –

2

यहाँ एक सरल regex #[[:alnum:]_]/ है:

वैकल्पिक रूप से, आप लुक-पीछे मिलान जो केवल के बाद एक '#' अक्षरांकीय अक्षर से मेल खाएगी उपयोग कर सकते हैं। ध्यान दें कि इसमें अंडरस्कोर शामिल हैं क्योंकि फेसबुक में वर्तमान में हैशटैग के हिस्से के रूप में अंडरस्कोर शामिल है (जैसा कि ट्विटर करता है)। http://rubular.com/r/XPPqwtVGN9

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

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