2013-06-13 10 views
10

से मेल खाने के लिए मैं एक परीक्षण रिपोर्ट में सभी पंक्तियों से मेल खाना चाहता हूं, जिसमें 'ठीक नहीं' शब्द शामिल हैं। पाठ की उदाहरण पंक्ति:पायथन रेगेक्स एक विशिष्ट शब्द

'Test result 1: Not Ok -31.08' 

मैं इस कोशिश की:

filter1 = re.compile("Not Ok") 
for line in myfile:          
    if filter1.match(line): 
     print line 

जो http://rubular.com/ के अनुसार काम करना चाहिए, लेकिन मैं उत्पादन पर कुछ भी नहीं मिलता है। कोई विचार, क्या गलत हो सकता है? विभिन्न अन्य मानकों का परीक्षण किया, जैसे "।" और "^ टेस्ट", जो पूरी तरह से काम करते हैं।

+0

क्यों regex अगर यह एक विशिष्ट स्ट्रिंग है? लाइन में 'अगर नहीं "ठीक नहीं है:'? –

+0

बीटीडब्ल्यू, 're.match() 'स्ट्रिंग की शुरुआत में ही मेल खाता है। –

+0

मुझे यकीन था कि मैच न केवल स्ट्रिंग की शुरुआत कर सकता है .. लाइन के अंत से $ नहीं मिलना चाहिए? – casper

उत्तर

24

आपको re.search का उपयोग re.match पर नहीं करना चाहिए। खोज() के बजाय

आप स्ट्रिंग में कहीं भी एक मैच खोजने के लिए चाहते हैं, का उपयोग करें:

docs re.match से

आप सटीक शब्द 'Not Ok' लिए देख रहे हैं तो \b शब्द सीमाओं का उपयोग करें, अन्यथा यदि आप केवल एक-स्ट्रिंग 'Not Ok' लिए देख रहे हैं तो सरल का उपयोग करें: if 'Not Ok' in string

>>> strs = 'Test result 1: Not Ok -31.08' 
>>> re.search(r'\bNot Ok\b',strs).group(0) 
'Not Ok' 
>>> match = re.search(r'\bNot Ok\b',strs) 
>>> if match: 
...  print "Found" 
... else: 
...  print "Not Found" 
...  
Found 
+0

वास्तव में, यह सभी अतिरिक्त \ b सामान के बिना भी काम करता है। धन्यवाद! मैंने यह भी पाया कि refindall इस मामले में काम किया। – casper

+3

@casper बिना '\ b' यह कुछ भी इस तरह के लिए 'True' वापस करेगा:' 'KNot Oke'। 're.findall' सभी गैर-ओवरलैपिंग मैचों की एक सूची लौटाता है, उद्देश्य 're.search' की जांच के लिए सबसे अच्छा विकल्प है। –

1

आप बस इस्तेमाल कर सकते हैं,

if <keyword> in str: 
    print('Found keyword') 

उदाहरण:

if 'Not Ok' in input_string: 
    print('Found string') 
संबंधित मुद्दे