Вы получите этот результат, потому что вы используете header.string
, который вызывает .string для объекта Match * , который вернет вам строку, переданную в match()
или поиск ()
.
В строке уже есть новые строки:
text = r"# Title\n## Chapter\n### sub-chapter#### What a lovely day.\n"
Так что, если вы используете свой шаблон (обратите внимание, что он также будет соответствовать новой строке), вы можете обновить свой код до:
import re
pattern = r"(# .+?\\n)"
text = r"# Title\n## Chapter\n### sub-chapter#### What a lovely day.\n"
header = re.search(pattern, text)
print(header.group())
Демо Python
Обратите внимание, что re.search ищет первое местоположение, где регулярное выражение производит совпадение.
Другим вариантом, соответствующим вашему значению, может быть совпадение с начала строки #
, за которым следует пробел, а затем любой символ, кроме новой строки, до конца строки:
^# .*$
Например:
import re
pattern = r"^# .*$"
text = "# Title\n## Chapter\n### sub-chapter#### What a lovely day.\n"
header = re.search(pattern, text, re.M)
print(header.group())
Python demo
Если после этого не может быть больше #
, вы также можете использовать отрицательный класс символов , чтобы не совпадать с #
или символом новой строки:
^# [^#\n\r]+$