我想從 mwparserfromhell 函式庫傳回的 wiki 連結中提取資料。 例如,我想解析以下字串:
[[file:warszawa, ul. freta 16 20170516 002.jpg|thumb|upright=1.18|[[maria skłodowska-curie museum|birthplace]] of marie curie, at 16 freta street, in [[warsaw]], [[poland]].]]
如果我使用字元|
分割字串,則它不起作用,因為圖像描述中也有一個使用|
的連結:[[瑪麗亞·斯克沃多夫斯卡-居禮博物館|出生地]]
。
我使用正規表示式首先替換字串中的所有鏈接,然後再拆分它。它可以工作(在本例中),但感覺不乾淨(請參閱下面的程式碼)。有沒有更好的方法從這樣的字串中提取資訊?
import re wiki_code = "[[File:Warszawa, ul. Freta 16 20170516 002.jpg|thumb|upright=1.18|[[Maria Skłodowska-Curie Museum|Birthplace]] of Marie Curie, at 16 Freta Street, in [[Warsaw]], [[Poland]].]]" # Remove [[File: at the begining of the string prefix = "[[File:" if (wiki_code.startswith(prefix)): wiki_code = wiki_code[len(prefix):] # Remove ]] at the end of the string suffix = "]]" if (wiki_code.endswith(suffix)): wiki_code = wiki_code[:-len(suffix)] # Replace links with their link_pattern = re.compile(r'\[\[.*?\]\]') matches = link_pattern.findall(wiki_code) for match in matches: content = match[2:-2] arr = content.split("|") label = arr[-1] wiki_code = wiki_code.replace(match, label) print(wiki_code.split("|"))
.filter_wikilinks()
傳回的連結是wikilink
# 類,該類別具有title
和text
屬性。
title
傳回連結的標題:file:warszawa, ul。弗雷塔16 20170516 002.jpg
text
回傳連結的其餘部分:thumb|upright=1.18|[[maria skłodowska-curie museum|birthplace]] 瑪麗居禮(marie curie),地址:16 freta street ,[[華沙]],[[波蘭]]。
這些傳回為 wikicode
物件。
由於實際文字總是最後一個片段,因此首先需要使用以下正規表示式來尋找其他片段:
([^\[\]|]*\|)
#(
)
: 群組
[^\[\]|]*
: 0 個或多個非方括號或垂直線的字元\|
:文字管道
:1個或多個從最後一個符合的結束索引到字串末尾的所有其他內容都是最後一個片段。
>>> import mwparserfromhell >>> import re >>> wikitext = mwparserfromhell.parse('[[File:Warszawa, ul. Freta 16 20170516 002.jpg|thumb|upright=1.18|[[Maria Skłodowska-Curie Museum|Birthplace]] of Marie Curie, at 16 Freta Street, in [[Warsaw]], [[Poland]].]]') >>> image_link = wikitext.filter_wikilinks()[0] >>> image_link '[[File:Warszawa, ul. Freta 16 20170516 002.jpg|thumb|upright=1.18|[[Maria Skłodowska-Curie Museum|Birthplace]] of Marie Curie, at 16 Freta Street, in [[Warsaw]], [[Poland]].]]' >>> image_link.title 'File:Warszawa, ul. Freta 16 20170516 002.jpg' >>> text = str(image_link.text) >>> text 'thumb|upright=1.18|[[Maria Skłodowska-Curie Museum|Birthplace]] of Marie Curie, at 16 Freta Street, in [[Warsaw]], [[Poland]].' >>> other_fragments = re.match(r'([^\[\]|]*\|)+', text) >>> other_fragments <re.Match object; span=(0, 19), match='thumb|upright=1.18|'> >>> other_fragments.span(0)[1] 19 >>> text[19:] '[[Maria Skłodowska-Curie Museum|Birthplace]] of Marie Curie, at 16 Freta Street, in [[Warsaw]], [[Poland]].'
以上是如何從維基連結中提取資料?的詳細內容。更多資訊請關注PHP中文網其他相關文章!