我试图削减德语维基百科的文章,只输出传记文本数据(删除所有的文学,图书列表等)。因此,一个文本的例子可能如下所示:
一些相关的文本,==,Title1,==,更相关的文本===Title2===,更相关的文本,==,关于人的一些文献,不想要的文本,==books被author==更多的不想要的文本.
问题是要在==text模式之前输出文本,包括文学或books==这个词。如下所示:
一些相关文本== Title1 ==更相关的文本===Title2===和更相关的文本
我正在使用Python 3,我尝试了一些像这样的Regex (还有更多的):
seperator = re.compile(r'={2,3}\s?.*literature.*\s?={2,3}')
m = seperator.search(text)
print (text[:m.start()])但是,不幸的是,这只会在第一个模式== Title1 ==之前输出文本:
有关案文
我如何使它敏感,以捕捉第一个模式,其中有‘文学’或‘书’本身?
我希望我能准确地描述这个问题。谢谢你的帮助,很抱歉,如果之前有人问过这个问题,我在任何地方都找不到解决办法。
顺便说一句,区分Title1和Title2是没有选择的,因为它们有时太不一样了,而且不太清楚,所以我试着区分那些明显标志着文学或书籍等传记文本结尾的书名。
发布于 2019-04-28 15:59:30
这里是一种纯Python的方法。这将在'='上拆分文本,并检查每个拆分中的单词。如果找到匹配,则中断循环并在其之前加入所有的循环:
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发布于 2019-04-28 16:02:41
如果我正确理解了您的需求,下面的regex应该适用于您:
.+?(?=={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()))输出:
匹配1在0-87找到:一些相关的文本== Title1 ==更相关的文本===Title2===和更相关的文本。
https://stackoverflow.com/questions/55891958
复制相似问题