Регулярное выражение 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

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


РЕДАКТИРОВАТЬ: лучший способ

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

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

Другие вопросы по тегам