Поиск регулярного выражения 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())

Я ничего не получаю. Мне нужно иметь возможность использовать реальное регулярное выражение, например, в perl

Ответ 1

Вы можете использовать многострочный режим, тогда ^ соответствует началу строки:

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

достаточно хорош для проверки параметра


EDIT: лучший способ

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

Еще раз нет причин иметь ведущие пробелы. Однако, если вы хотите быть уверены, что всегда можете использовать lstrip().