2013-02-26 147 views
5

मैं एक यूआरएल स्ट्रिंग पर पायथन रेगेक्स का उपयोग करने की कोशिश कर रहा हूं।पायथन रेगेक्स - खोज के बीच अंतर और सभी

id= 'edu.vt.lib.scholar:http/ejournals/VALib/v48_n4/newsome.html' 
>>> re.search('news|ejournals|theses',id).group() 
'ejournals' 
>>> re.findall('news|ejournals|theses',id) 
['ejournals', 'news'] 

http://docs.python.org/2/library/re.html#finding-all-adverbs पर डॉक्स के आधार पर यह कहते खोज() पहले से मेल खाता है और लगता है सभी स्ट्रिंग में हर संभव लोगों से मेल खाता है।

मुझे आश्चर्य है कि क्यों 'समाचार' खोज के साथ कब्जा नहीं किया गया है, भले ही इसे पैटर्न में पहले घोषित किया गया हो।

क्या मैंने गलत पैटर्न का उपयोग किया था? मैं खोजना चाहता हूं कि इनमें से कोई भी कीवर्ड स्ट्रिंग में होता है या नहीं।

उत्तर

1

आप इसके बारे में सोच रहे हैं। रेगेक्स "news" या "ejournals" या "theses" की तलाश में लक्षित स्ट्रिंग के माध्यम से जाता है और इसे प्राप्त करने वाला पहला लौटाता है। इस मामले में "ejournals" पहले लक्ष्य स्ट्रिंग में दिखाई देता है।

+0

धन्यवाद। मेरा बुरा, मैंने इस बारे में नहीं सोचा था। – kich

2

re.search() फ़ंक्शन आपकी स्थिति को संतुष्ट करने वाली पहली घटना के बाद बंद हो जाता है, पैटर्न में पहला विकल्प नहीं।

0

जानते हैं कि कुछ अन्य मतभेद खोज और के बीचfindall जो यहाँ कहा गया है नहीं कर रहे हैं कि हो सकता है। उदाहरण के लिए:

python-regex why findall find nothing, but search works?

+0

कृपया प्रश्न की सामग्री को अपने उत्तर में ले जाने पर विचार करें। – SteveFest