【发布时间】:2018-11-06 15:50:44
【问题描述】:
以下代码根据子字符串的出现(我在这里说关键字)以及与之关联的文本从文件中提取行:
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 方法来实现吗?
由于我的文件中的内容不是固定的,所以无法使用某些正则表达式来提取它。逻辑是,找到关键字并获取它前面的所有内容,除非出现下一个关键字。
【问题讨论】:
-
下一个关键字之前总是有换行符吗?
-
@Sven Krüger- 是的
-
@MikeRobins - 谢谢,让我看看。
-
我不知道你的正则表达式知识水平 :) 所以我只能建议在regexone.com 完成所有课程,阅读regular-expressions.info,regex SO tag description(还有许多其他链接到很棒的在线资源),以及名为 What does the regex mean 的社区 SO 帖子。另外,rexegg.com 值得一看。