======AD_START======
ABC
XYZ
EFG
======AD_END======
我想同时提取ABC、XYZ和EFG。
我试过使用以下方法,但都不起作用:
re.findall(r'======AD_START======(.*?)======AD_END======', book)
re.search(r'======AD_START======(.*?)======AD_END======', book)
您可以将python切片与str.index()
方法一起使用:
file.txt
:
======AD_START======
ABC
XYZ
EFG
======AD_END======
方法如下:
with open('file.txt', 'r') as f:
s = f.read()
start = "======AD_START======"
end = "======AD_END======"
print(s[s.index(start) + len(start): s.index(end)])
输出:
ABC
XYZ
EFG
您希望.
吹过n
边界(每行结束),因此您应该将re.DOTALL
作为标志传递给search
。另外,?
表示"0"或"1"。
book = '''
======AD_START======
ABC
XYZ
EFG
======AD_END======
'''
import re
precise = re.search(r'======AD_START======(.+?)======AD_END======', book, re.DOTALL)
print('*'*80)
print(precise.group(1))
print('*'*80)
输出:
********************************************************************************
ABC
XYZ
EFG
********************************************************************************
请注意,如果AD_START
和AD_END
行之间没有任何内容,这仍然会生成包含2行空行的结果。我不确定你的解析要求是什么,但这解决了你的问题。