2013-05-31 6 views
10

यहाँ मेरी कोड है:अजगर regex खोज

#!/usr/bin/python 
import io 
import re 
f = open('/etc/ssh/sshd_config','r') 
strings = re.search(r'.*IgnoreR.*', f.read()) 
print(strings) 

डेटा देता है यही कारण है कि, लेकिन मैं विशिष्ट रेगुलर एक्सप्रेशन मिलान की जरूरत है: उदाहरण के लिए:

^\s*[^#]*IgnoreRhosts\s+yes 

अगर मैं अपने कोड बदलने बस के लिए:

strings = re.search(r'^IgnoreR.*', f.read()) 

या यहाँ तक कि

strings = re.search(r'^.*IgnoreR.*', f.read()) 

मुझे कुछ भी वापस नहीं मिला है।

#!/usr/bin/python 
import io 
import re 
f = open('/etc/ssh/sshd_config','r') 

strings = re.search(r"^\s*[^#]*IgnoreRhosts\s+yes", f.read(), flags=re.MULTILINE) 
print(strings.group(0)) 

ध्यान दें कि इस विधा के बिना आप हमेशा \n द्वारा ^ जगह ले सकता है: मैं

+0

और आप 're.search (r"^\ s * [^ #] * IgnoreRhosts \ s + yes ", f.read()) का उपयोग क्यों नहीं कर रहे हैं? –

+0

पायथन का रेगेक्स सिंटैक्स पेर्ल के – SethMMorton

+0

जैसा ही है यदि^इग्न काम नहीं करता है, तो कोई तरीका नहीं है '^ \ s * [^ #] * IgnoreRhosts \ s + yes' काम करेगा। मैं सबसे कम आम denominator की तलाश में था। –

उत्तर

16

फिर आप बहु मोड का उपयोग कर सकते हैं^एक पंक्ति के आरंभ से मेल पर्ल में असली regex के उपयोग करने के लिए की तरह सक्षम होना चाहिए

नोट भी है कि इस फाइल को एक टमाटर इस प्रकार के रूप में ठीक नहीं:

^IgnoreRhosts\s+yes 

बराबर की जाँच के लिए काफी अच्छा है ameter


संपादित करें: एक बेहतर तरीका

with open('/etc/ssh/sshd_config') as f: 
    for line in f: 
     if line.startswith('IgnoreRhosts yes'): 
      print(line) 

एक बार प्रमुख रिक्त स्थान के लिए कोई कारण नहीं है। हालांकि अगर आप यह सुनिश्चित करना चाहते हैं कि आप हमेशा lstrip() का उपयोग कर सकते हैं।

+3

क्या मतलब है कि यह टमाटर की तरह कैलिब्रेटेड है? –

+0

@GlitchCowboy: हमेशा वही –

+0

ठीक है, मल्टीलाइन जादू था। 'स्ट्रिंग्स = re.findall (r"^\ s * [^ #] * IgnoreRhosts \ s + yes ", f.read(), flags = re.MULTILINE) स्ट्रिंग में आइटम के लिए: प्रिंट (आइटम)' –

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