是否有一种方法在文本文件中提取python中的两个标签之间的东西?


======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_STARTAD_END行之间没有任何内容,这仍然会生成包含2行空行的结果。我不确定你的解析要求是什么,但这解决了你的问题。

最新更新