python - 从特定模式之前的字符串中提取
问题描述
我正在尝试删减德语维基百科文章,只输出传记文本数据(删去所有文学作品、书单等)。因此,文本的示例可能如下所示:
一些相关文本 == Title1 == 更多相关文本 ===Title2=== 和更多相关文本 == 一些关于人物的文献 == 不需要的文本 == 作者的书籍 == 更多不需要的文本...
问题是在 ==[包括单词文学或书籍的文本]== 模式之前输出文本。这将是:
一些相关文本 == Title1 == 更多相关文本 ===Title2=== 和更多相关文本
我正在使用 Python 3,我尝试了一些这样的正则表达式(以及更多):
seperator = re.compile(r'={2,3}\s?.*literature.*\s?={2,3}')
m = seperator.search(text)
print (text[:m.start()])
但是,不幸的是,这只会输出文本,直到第一个模式 == Title1 ==:
一些相关的文字
我怎样才能让它敏感地捕捉到第一个具有“文学”或“书籍”的模式?
我希望我能准确地描述这个问题。提前感谢您的帮助,如果之前有人问过这个问题,我很抱歉,我在任何地方都找不到解决方案。
顺便说一句,它无法区分 Title1 和 Title2,因为它们有时过于不同且不清楚,所以我试图区分清楚地标记传记文本结束的标题,例如文学或书籍。
解决方案
如果我正确理解您的要求,以下正则表达式应该适合您:
.+?(?=={2,3}[^=]*literature)
Python 3 示例:
import re
regex = r".+?(?=={2,3}[^=]*literature)"
test_str = "some relevant text == Title1 == more relevant text ===Title2=== and more relevant text == some literature on person == unwanted text ==books by the author== more unwanted text..."
matches = re.finditer(regex, test_str, re.MULTILINE)
for matchNum, match in enumerate(matches, start=1):
print ("Match {matchNum} was found at {start}-{end}: {match}".format(matchNum = matchNum, start = match.start(), end = match.end(), match = match.group()))
输出:
在 0-87 找到匹配 1:一些相关文本 == Title1 == 更相关文本 ===Title2=== 和更相关文本
推荐阅读
- node.js - 如何在 nosql 上进行多条件查询
- windows - 为什么 CMD 会忽略字符 `;`?
- reactjs - 无法从 npm 构建反应应用程序
- android - 如何在 Room Db 中插入重复行?
- actionscript-3 - adobe animate - 发布到 I Phone
- mysql - mysql最后5条记录处于计数状态
- postfix-mta - Python smtplib.SMTP('localhost') 永远挂起
- google-cloud-endpoints - Google Cloud Endpoint API 工作正常,但日志中没有记录
- sql - Oracle SQL Developer - 连接数据
- python - 嵌套 Python 字典排序