13

这是我的代码:

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

我什么也拿不回来。我需要能够在 perl 中使用真正的正则表达式

4

1 回答 1

20

您可以使用多行模式,然后 ^ 匹配一行的开头:

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

还要注意,这个文件被校准为番茄,因此:

^IgnoreRhosts\s+yes

足以检查参数


编辑:更好的方法

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

再一次没有理由有前导空格。但是,如果您想确保始终可以使用lstrip().

于 2013-05-31T17:01:50.487 回答