Python 在具有多个'\n';s

Python 在具有多个'\n';s,python,python-3.x,re,Python,Python 3.x,Re,我的目标是在search\u term\u start和search\u term\u end之间找到一段文本。我遇到的问题是,只有在使用不带“\n”字符的字符串时,我才能完成此任务。下面的代码引发AttributeError import re logs = 'cut-this-out \n\n givemethisstring \n\n and-this-out-too' search_term_start = '''cut-this-out''' search_term_end = '

我的目标是在search\u term\u start和search\u term\u end之间找到一段文本。我遇到的问题是,只有在使用不带“\n”字符的字符串时,我才能完成此任务。下面的代码引发AttributeError

import re

logs = 'cut-this-out \n\n givemethisstring \n\n and-this-out-too'

search_term_start = '''cut-this-out'''
search_term_end = '''and-this-out-too'''

total_pages = re.search(search_term_start + '(.*)' + search_term_end, logs)
print(total_pages.group(1))
如果我从日志中删除“\n”字符,程序将以我希望的方式运行:

import re

logs = 'cut-this-out givemethisstring and-this-out-too'

search_term_start = '''cut-this-out'''
search_term_end = '''and-this-out-too'''

total_pages = re.search(search_term_start + '(.*)' + search_term_end, logs)
print(total_pages.group(1))

如果字符串有'\n'个字符,我似乎无法在其中搜索子字符串。如何在不从原始字符串中删除“\n”的情况下检索并保存此子字符串?

re.DOTALL正是您要查找的标志

使“.”特殊字符完全匹配任何字符,包括 新线;如果没有此标志,“.”将匹配除换行以外的任何内容。 对应于内联标志(?s)

试试这个:

import re

logs = 'cut-this-out \n\n givemethisstring \n\n and-this-out-too'

search_term_start = '''cut-this-out'''
search_term_end = '''and-this-out-too'''


c = re.compile(search_term_start + r'(.*)' + search_term_end, re.DOTALL)
print(c.search(logs).group(1))

这很好用,非常感谢!如果有多个'and this out too'语句,它将一直打印到最后一个语句,我如何在找到第一个search_term_end实例后停止遍历字符串?@mimky使用非贪婪版本:
r'(.*)
而不是
r'(.*)