2013-05-31 24 views
10

はここに私のコードです:Pythonの正規表現検索は

#!/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()) 

私は戻って何も得られません。このモードずに常に\n^を置き換えることができ

#!/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)) 

注:私は

+0

なぜre.search(r "^ \ s * [^#] * IgnoreRhosts \ s + yes"、f.read()) 'を使用していないのですか? –

+0

Pythonの正規表現の構文は、perlの – SethMMorton

+0

と同じです。^ Ignが機能しない場合、r '^ \ s * [^#] * IgnoreRhosts \ s + yes'という方法はありません。私は最低の共通点を求めていました。 –

答えて

16

あなたが行の先頭にマッチその後、複数行モードを使用^できperlでのような正規表現の実際を使用できるようにする必要がありますこのファイルは、このようにトマトと校正されていることをあまりにも

注:

^IgnoreRhosts\s+yes 

はパーを確認するには十分です


EDIT 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

OK、マルチラインは魔法でした。 'string = re.findall(r"^\ s * [^#] * IgnoreRhosts \ s + yes "、f.read()、flags = re.MULTILINE) print(item)' –