def name():
with open('newfile.txt') as f:
lineno = f.readlines()
for line in lineno:
h = re.compile('(#DESIGNATION\ \:[\n\t]*)((.)*[\n\t]*)*?\#')
print h.match(line)
name()
newfile.txt包含大约100行。运行此程序时会出错[{1}}。去除?来自MemoryError
',没有错误。为什么会发生这种情况,什么是可行的解决方案。
感谢。
答案 0 :(得分:1)
如果你想匹配" #DESIGNATION:"然后是一些行,然后是一行"#"在开始时,您首先需要将文本作为单个字符串阅读,并使用re.MULTILINE
来匹配它。这是一个例子:
import re
text = '''
cat
mouse
#DESIGNATION : horse
dog
bird
lake
#
ocean
sea
#DESIGNATION : bike
box
table
#
nothing
something
'''
h = re.compile('^#DESIGNATION :(?:[^\n]|\n[^#])*\n#', re.MULTILINE)
matches = re.findall(h, text)
print repr(matches)
输出
['#DESIGNATION : horse\ndog\nbird\nlake\n#', '#DESIGNATION : bike\nbox\ntable\n#']
请注意,我在这里使用(?:)
匹配运算符将正则表达式组合在一起,而不是在每次评估时都捕获匹配的文本。
使用更大的文件,您可能不希望立即重新匹配整个文本正文并反复遍历这些行。但是,如果你这样做,就不能使用' \ n'在表达式中,因为您一次只能处理一行。相反,如果您在#DESIGNATION块中,则需要保持状态。