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