首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从特定模式之前的字符串中提取

从特定模式之前的字符串中提取
EN

Stack Overflow用户
提问于 2019-04-28 15:51:15
回答 2查看 253关注 0票数 0

我试图削减德语维基百科的文章,只输出传记文本数据(删除所有的文学,图书列表等)。因此,一个文本的例子可能如下所示:

一些相关的文本,==,Title1,==,更相关的文本===Title2===,更相关的文本,==,关于人的一些文献,不想要的文本,==books被author==更多的不想要的文本.

问题是要在==text模式之前输出文本,包括文学或books==这个词。如下所示:

一些相关文本== Title1 ==更相关的文本===Title2===和更相关的文本

我正在使用Python 3,我尝试了一些像这样的Regex (还有更多的):

代码语言:javascript
复制
seperator = re.compile(r'={2,3}\s?.*literature.*\s?={2,3}')
m = seperator.search(text)
print (text[:m.start()])

但是,不幸的是,这只会在第一个模式== Title1 ==之前输出文本:

有关案文

我如何使它敏感,以捕捉第一个模式,其中有‘文学’或‘书’本身?

我希望我能准确地描述这个问题。谢谢你的帮助,很抱歉,如果之前有人问过这个问题,我在任何地方都找不到解决办法。

顺便说一句,区分Title1和Title2是没有选择的,因为它们有时太不一样了,而且不太清楚,所以我试着区分那些明显标志着文学或书籍等传记文本结尾的书名。

EN

回答 2

Stack Overflow用户

发布于 2019-04-28 15:59:30

这里是一种纯Python的方法。这将在'='上拆分文本,并检查每个拆分中的单词。如果找到匹配,则中断循环并在其之前加入所有的循环:

代码语言:javascript
复制
s = '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'

lst = []
for x in s.split('='):
    if 'literature' in x:
        break
    else:
        lst.append(x)

print('='.join(lst).strip('='))
# some relevant text == Title1 == more relevant text ===Title2=== and more relevant text
票数 0
EN

Stack Overflow用户

发布于 2019-04-28 16:02:41

如果我正确理解了您的需求,下面的regex应该适用于您:

代码语言:javascript
复制
.+?(?=={2,3}[^=]*literature)

Regex demo

Python 3示例:

代码语言:javascript
复制
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()))

输出:

匹配1在0-87找到:一些相关的文本== Title1 ==更相关的文本===Title2===和更相关的文本。

Python demo

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55891958

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档