下面的代码根据文件中出现的子字符串(我在这里说关键字)以及与之相关的文本,从文件中提取行:
from itertools import count
def find_content_blocks_by_keywords(lines, keywords):
keyword_indexes = sorted([i for i, line in zip(count(), lines) for
keyword in keywords if re.search(keyword, line)])
return [lines[i:j] for i, j in zip([0]+keyword_indexes, keyword_indexes+[None])]
这是我的示例文本文件
keywords = ['Total item value', 'Total weight', 'Total volume']
lines = ['Total item value RSX 05,018.88\n',
'Total weight 90,969 EUR\n',
'Total volume -97.93 X3 Sca.\n',
'197.939 X3 Sca.']
要提取的子字符串及其值
result = find_content_blocks_by_keywords(lines, keywords):
样本结果:
[[],
['Total item value RSX 05,018.88\n'],
['Total weight 90,969 EUR\n'],
['Total volume -97.93 X3 Sca.\n', '197.939 X3 Sca.']]
我们可以通过使用
re.findall
或任何其他
re
直接用什么方法?
由于内容在我的文件中不是固定的,所以无法使用某些正则表达式来提取它。逻辑是,找到关键字并获取它前面的所有内容,除非出现下一个关键字。